我正在使用WordPress和JSON API插件(http://wordpress.org/extend/plugins/json-api/)来生成对其他网站的回复。
我遇到了一个非常奇怪的问题(我们使用的是PHP 5.3.6),当我将以下数组http://pastebin.com/xdfYjrvK传递给json_encode()时,它给了我这个(使用json内容类型):{ {3}}
所以在开头的垃圾,在上面的例子中它最终是2609和0,它根据响应的大小而变化,更多的内容 - >更高的十六进制数它也只在响应量“足够高”时出现,因此它适用于小响应。
首先我认为它是插件,但它在本地(在两台不同的Mac OS X机器上)工作,我们已经将VPS(Debian,Apache,Nginx,PHP)上的所有软件包更新到最新版本。
仅在发送内容类型时显示,而不是在使用纯文本而不是application / json输出$ result时显示:
$charset = get_option('blog_charset');
if (!headers_sent()) {
header('HTTP/1.1 200 OK', true);
header("Content-Type: application/json; charset=$charset", true);
}
echo $result;
$ charset设置为utf-8。
Google Chrome控制台说:“资源被解释为文档,但使用MIME类型application / json进行传输。”
那么,有没有人知道这里发生了什么?
答案 0 :(得分:4)
这看起来像分块编码(http://en.wikipedia.org/wiki/Chunked_transfer_encoding)。确保检查标题是否在响应中正确设置了Content-Length,以确保您不强制Web服务器使用CTE。
答案 1 :(得分:0)
json的一个要求是,所有数据必须为UTF-8编码。 json_encode()不会自动执行此操作。因此,您可以在json_encode之前尝试运行此array_map("utf8_encode", $array);
。
其他......看起来很奇怪,所以我只是猜测......