【问题标题】:json_encode() character 127 ASCIIjson_encode() 字符 127 ASCII
【发布时间】:2021-12-31 20:12:16
【问题描述】:

考虑以下代码:

$str = '';
for ($i=0x0; $i<=0x7f; $i++) {
   $str .= chr($i);
}

echo json_encode($str);

结果是:

"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-.\/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"

只有一个 ASCII 字符(最后一个):127 (0x7f)

有没有办法显示那个角色? (例如:“\u007f”)

【问题讨论】:

    标签: php json


    【解决方案1】:

    我不确定,但我认为这就是您要搜索的内容:

    U+007F

    另请参阅此答案:Why no symbols defined for ascii values from 127 to 159

    【讨论】:

      【解决方案2】:

      删除 (DEL) 是 ASCII 字符集中的控制字符,编码为 0x7f 或十进制 127。此字符在 JSON 字符串中保存为 ASCII。通过以十六进制格式输出 JSON 字符串,可以使该字符可见。

      $jsonStr = json_encode(chr(0x7f));
      echo bin2hex($jsonStr);  //227f22 
      

      22是双引号(")的编码。echo不适合检查字符串中的内容。总有误解。控制字符(包括DEL)在浏览器中只显示为空格。如果你仔细查看代码示例的结果,您会看到末尾的空格。

      【讨论】:

      • 我认为 json_encode() 应该将此字符编码为 \u007f,就像它对其他控制字符(例如:退格 \b)一样。但由于某种原因,它一直保持这种状态。
      猜你喜欢
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 2017-04-13
      • 2021-12-31
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多