PHP如何避免json_encode转义并正确返回JSON给浏览器
解决方法
问题根因:PHP 双引号字符串原生不支持 \uXXXX 格式的 Unicode 转义写法,你代码中写的 "\u0002" 会被PHP解析为普通字符串(由反斜杠、u、0、0、0、2共6个字符组成),调用 json_encode 时默认会对字符串中的反斜杠做转义处理,最终就输出了 \\u0002。
根据你的实际需求,有两种对应解决方案:
方案1:需要输出U+0002控制字符对应的Unicode序列
如果你本意是要输出字符编码为U+0002的控制字符,只需要把PHP字符串的Unicode转义写法改为PHP支持的 \u{XXXX} 格式即可(该写法支持PHP 7.0及以上版本):
<?php $arr = array('a'=> "\u{0002} hello"); exit(json_encode($arr)); ?>
上述代码运行后会直接输出符合JSON规范的结果:{"a":"\u0002 hello"}
方案2:需要将\u0002作为普通文本保留
如果你就是要把\u0002作为普通文本输出,不需要它代表任何控制字符,只需要给json_encode添加JSON_UNESCAPED_SLASHES参数,禁止转义反斜杠即可(该参数支持PHP 5.4.0及以上版本,覆盖绝大多数现有运行环境):
<?php $arr = array('a'=> "\u0002 hello"); exit(json_encode($arr, JSON_UNESCAPED_SLASHES)); ?>
运行后输出结果和你预期完全一致。
内容的提问来源于stack exchange,提问作者webber
相关产品推荐
相关产品推荐

