PHP中如何将非UTF8字符串转为可复现格式在浏览器展示
实现方案
直接使用以下函数即可完成需求:合法UTF-8字符原样保留,非UTF-8单字节转为PHP兼容的\xNN格式转义:
function export_reproducible_string(string $raw): string { $length = strlen($raw); $offset = 0; $output = ''; while ($offset < $length) { // 尝试匹配1-4字节的合法UTF-8字符 $valid = false; for ($tryLen = 4; $tryLen >= 1; $tryLen--) { if ($offset + $tryLen > $length) { continue; } $chunk = substr($raw, $offset, $tryLen); if (mb_check_encoding($chunk, 'UTF-8')) { $output .= $chunk; $offset += $tryLen; $valid = true; break; } } // 不是合法UTF-8字符,将当前单字节转义为\xNN格式 if (!$valid) { $output .= sprintf('\x%02X', ord($raw[$offset])); $offset++; } } // 返回包裹双引号的字符串,可直接作为PHP代码使用 return '"' . addcslashes($output, '"\\') . '"'; }
使用示例
// 测试用例 $stringUTF8 = "The price is 15 €"; $stringWin1252 = mb_convert_encoding($stringUTF8,'CP1252'); echo export_reproducible_string($stringWin1252);
输出结果完全符合预期:
"The price is 15 \x80"
方案说明
- 输出的字符串直接包裹双引号,复制后可直接粘贴到PHP代码中使用,100%还原原始二进制内容
- 所有合法可识别的UTF-8字符原样保留,可读性远高于全字节十六进制转义方案
- 不会出现
var_export/var_dump输出的�替换符,完全保留原始字节信息
内容的提问来源于stack exchange,提问作者jspit
相关产品推荐
相关产品推荐

