PHP替换<sup>标签为上标字符出现O²乱码该如何修复
问题根源
你遇到的O²乱码是典型的UTF-8字符被错误转码为ISO-8859-1编码导致的问题,核心诱因是你用了utf8_decode()函数:
²在UTF-8编码下是双字节字符\xC2\xB2utf8_decode()会把UTF-8字符串转为ISO-8859-1单字节编码,转换过程中\xC2会被映射为字符Â,\xB2会被映射为²,最终就出现了异常的²拼接结果- 额外注意你代码里的
$POST写法错误,PHP接收POST参数的全局变量是$_POST,少写下划线会导致无法正常获取提交的参数值
修复方案
- 直接删除
$a = utf8_decode($a);这行转码逻辑,只要前端提交的POST请求默认是UTF-8编码(当前绝大多数Web场景的默认配置),不需要额外做编码转换 - 确认你的PHP源文件本身保存为UTF-8无BOM格式,保证你代码中写死的
"²"字符串本身编码正确 - 保留你已经添加的编码响应头即可,确保输出时客户端按UTF-8解析内容
修复后的核心处理代码如下:
$a = htmlspecialchars_decode($_POST['myValue'], ENT_QUOTES); $a = str_replace("<sup>2</sup>", "²", $a);
内容的提问来源于stack exchange,提问作者Saif
相关产品推荐
相关产品推荐

