php json_encode UTF-8

时间:2013-11-04 07:46:41

标签: php unicode json

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

  

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

所以你的问题的答案是否定的,这并不意味着。反之亦然。如果它是有效的UTF-8,那就没关系。

答案 1 :(得分:0)

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

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