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

时间:2010-04-17 16:36:32

标签: php utf-8 json

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

看看JSON rfc,UTF8在JSON输出中也是有效的字符集,虽然不推荐,即一些实现可以在其中留下UTF8数据。问题是PHP的实现是否转换为ASCII或者选择保留为UTF-8。

3 个答案:

答案 0 :(得分:6)

other languages中的JSON支持不同,json_encode()无法生成其他而不是ASCII。

答案 1 :(得分:3)

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

  

使用反斜杠转义的双引号

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

因此,ASCII / ANSI之外的任何UTF-8字符都应该像这样转义:\u0027(注意,正如@Ignacio在评论中指出的那样,这是推荐的方式处理这些字符,而不是必需一个

但是,我想json_decode()会将字符转换回字节值吗?你可能会遇到麻烦。

如果您需要确定,请先查看可能会将您的UTF-8字符串转换为ASCII(删除任何不受支持的字符)的iconv()

答案 2 :(得分:0)

好吧,json_encode返回一个字符串。根据{{​​3}}:

  

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

所以暂时你不必担心让它知道UTF-8。当然,你仍然可能想要考虑这个问题,以便将来证明您的代码。