不同服务器上json_解码的不同输出

不同服务器上json_解码的不同输出,json,unicode,Json,Unicode,我目前正在Heroku上托管一个PHP Facebook应用程序,在该应用程序中,我使用cURL从Graph API获取有关用户的数据 我遇到了返回的数据包含unicode字符的问题,因为Heroku系统上的json_解码没有正确输出unicode字符。本地系统上的输出(相同代码)正常 查看从Graph返回的原始JSON,我可以看到它包含unicode转义,例如 {"id":"100003517896374","name":"Sky\u00e9 Mont\u00e1na","first_

我目前正在Heroku上托管一个PHP Facebook应用程序,在该应用程序中,我使用cURL从Graph API获取有关用户的数据

我遇到了返回的数据包含unicode字符的问题,因为Heroku系统上的json_解码没有正确输出unicode字符。本地系统上的输出(相同代码)正常

查看从Graph返回的原始JSON,我可以看到它包含unicode转义,例如

{"id":"100003517896374","name":"Sky\u00e9     Mont\u00e1na","first_name":"Sky\u00e9","last_name":"Mont\u00e1na","link":"http:\/\/www.facebook.com\/skye.montana.73","username":"skye.montana.73","gender":"female","locale":"en_US"}
在我的本地系统上,json_decode将其转换为以下对象:

stdClass Object ( [id] => 100003517896374 [name] => Skyé Montána [first_name] => Skyé [last_name] => Montána [link] => http://www.facebook.com/skye.montana.73 [username] => skye.montana.73 [gender] => female [locale] => en_US )
在Heroku系统上,其转换如下:

stdClass Object ( [id] => 100003517896374 [name] => Skyé Montána [first_name] => Skyé [last_name] => Montána [link] => http://www.facebook.com/skye.montana.73 [username] => skye.montana.73 [gender] => female [locale] => en_US ) 
我对json_解码的理解是,它将识别并正确解释unicode。在本例中,在Heroku上,它似乎在识别unicode,但没有正确地解释它


我需要做一些PHP设置来解决这个问题吗?这可能与魔术有关吗?我已将两台服务器设置为具有相同的magic_quotes选项(关闭),但没有任何区别。

好的,像往常一样,在发布后5分钟,我找到了答案

Apache有一个AddDefaultCharset指令。这可以设置为Off,其中响应头中没有添加任何内容;On,其中iso-8859-1作为内容类型添加到响应头中;或者添加到特定的字符集,其中该字符集作为内容类型添加到响应标题中

在本地ApacheEnv中,我使用AddDefaultCharset将默认字符集设置为UTF-8,这将覆盖HTML页面的meta标记中设置的任何内容

在Heroku上,AddDefaultCharset设置为off,这意味着该字符集始终由HTML页面中的meta标记确定


我最大的失败是我在meta标签上有一个输入错误。这在我的本地环境中没有看到,因为Apache设置优先,但在Heroku中看到了,其中内容类型依赖于元标记设置。

是的,在大多数情况下,如果看到
é或类似内容,则UTF8字节被解释为ISO-8859-1/Windows-1252(错误的头,正确的字节)。如果您看到
您的ISO-8859-1/Windows-1252字节被解释为UTF-8(正确的头,错误的字节)@Garreth我面临同样的问题。我在post请求中将一个JSON编码的二进制文件内容发送到服务器,在那里我使用JSON_decode()对其进行解码,输出包含这些垃圾字符。你能告诉我怎么解决这个问题吗?在POST请求中设置哪些标题以避免此情况???