PHP中json_encode输出ASCII 127(0x7f)字符的实现方法
问题原因
默认情况下 json_encode 不会转义ASCII码为127(0x7f)的DEL控制字符,该字符为不可见字符,你在输出结果中看不到它不代表不存在,只是它没有被转义为可见的\u007f形式。
解决方法
方案1:使用PHP 8.2及以上版本内置参数
PHP 8.2.0版本新增了JSON_ESCAPE_CONTROL参数,传入该参数后json_encode会自动将所有控制字符(包含0x00-0x1f、0x7f)统一转义为\uXXXX格式,完全符合你的需求:
$str = ''; for ($i=0x0; $i<=0x7f; $i++) { $str .= chr($i); } echo json_encode($str, JSON_ESCAPE_CONTROL);
方案2:兼容低版本PHP的手动处理
如果使用的PHP版本低于8.2,没有JSON_ESCAPE_CONTROL可用,可以手动替换输出JSON中的DEL字符:
$str = ''; for ($i=0x0; $i<=0x7f; $i++) { $str .= chr($i); } $jsonResult = json_encode($str); // 手动将0x7f字符替换为转义格式 $jsonResult = str_replace(chr(0x7f), '\u007f', $jsonResult); echo $jsonResult;
两种方案最终输出的JSON末尾都会包含\u007f,覆盖完整的ASCII字符范围。
内容的提问来源于stack exchange,提问作者Richi RM
相关产品推荐
相关产品推荐

