代码之家  ›  专栏  ›  技术社区  ›  Milan BabuÅ¡kov

PHP的json_encode是否保证生成ASCII字符串?

  •  2
  • Milan BabuÅ¡kov  · 技术社区  · 15 年前

    好吧,这个主题说明了一切。我正在使用json_encode将一些utf8数据转换为json,我需要将其传输到当前仅限ASCII的某个层。所以我想知道我是否需要让它知道UTF-8,或者我可以让它保持原样。

    在JSON RFC中,utf8也是JSON输出中的有效字符集,尽管不推荐使用,也就是说,一些实现可能会将utf8数据留在里面。问题是PHP的实现是将所有内容都转储为ASCII,还是选择将某些内容保留为UTF-8。

    3 回复  |  直到 15 年前
        1
  •  6
  •   Ignacio Vazquez-Abrams    15 年前

    与中的JSON支持不同 other languages , json_encode() 没有生成任何内容的能力 其他 比ASCII。

        2
  •  3
  •   Pekka    15 年前

    根据中的JSON文章 Wikipedia ,字符串中的Unicode字符始终

    带反斜杠转义的双引号Unicode

    PHP手册中的示例 json_encode() 似乎证实了这一点。

    因此,在ascii/ansi之外的任何utf-8字符都应该这样转义: \u0027 (注意,正如@ignacio在评论中指出的,这是 推荐 处理这些角色的方法,而不是 必修的 一)

    不过,我想 json_decode() 是否将字符转换回其字节值?你在那里可能会遇到麻烦。

    如果你需要确定,看看 iconv() 这可以预先将UTF-8字符串转换为ASCII(删除任何不支持的字符)。

        3
  •  0
  •   Justin Ethier    15 年前

    好, json_encode 返回字符串。根据 PHP documentation for string :

    字符串是一系列字符。在php 6之前,字符与字节相同。也就是说,完全可以有256个不同的字符。这也意味着PHP不支持Unicode。有关一些基本的Unicode功能,请参见utf8_encode()和utf8_decode()。

    所以现在你不需要担心让它知道UTF-8。当然,为了将来证明您的代码,您可能仍然需要考虑这个问题。