【问题标题】:php json_encode UTF-8php json_encode UTF-8
【发布时间】:2013-11-04 07:46:40
【问题描述】:

json_encode()http://php.net/manual/en/function.json-encode.php 的php maual 说: 第一个输入参数值的所有字符串数据必须是UTF-8编码。

这是否真的意味着字符串数据不能包含任何0x00 byte(在 unicode 中可能会出现)?

我知道如果输入参数是用 utf-8 编码的有效字符串就可以了。但是如果输入字符串是一个有效的 GBK 编码字符串呢?伙计们,你对GBK有什么了解吗?我的意思是什么?

【问题讨论】:

    标签: php unicode json


    【解决方案1】:

    这意味着数据必须是有效的 UTF-8。 utf8encode 函数将 ISO-8859-1 转换为 UTF-8,所以如果你已经有了,不需要双重编码。

    A comment on utf8_encode manual page 我认为是正确的:

    utf8_encode 仅将 ISO-8859-1 编码的字符串转换为 UTF-8。一个 更合适的名称是“iso88591_to_utf8”。如果你的文字 未在 ISO-8859-1 中编码,您不需要此功能。如果你的 text 已经是 UTF-8,你不需要这个函数。实际上, 将此函数应用于未以 ISO-8859-1 编码的文本将 很可能只是乱码。

    所以你的问题的答案是否定的,这并不意味着。反之亦然。如果是合法的 UTF-8 就可以了。

    【讨论】:

    • 嘿,我写了那条评论!
    • @deceze 看起来如此:)
    【解决方案2】:

    不,这意味着字符串必须是有效的 UTF-8。 0x00 是 Unicode 字符 U+0000,在 UTF-8 中编码为 0x00。

    php > var_dump(json_encode(["\x00"]));
    string(10) "["\u0000"]"
    

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 2011-08-28
      • 2011-09-30
      相关资源
      最近更新 更多