You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:27:03