在我必须用于项目(Lithium)的框架中,特定页面上的输出通过json_encode()
。在本地和现场我尝试使用同一个数据,结果是:
null
。false
。在我运行json_last_error()
的两种情况下 - 它都会给我int(5)
。如果某些设置导致问题,我可以在这两个地方运行phpinfo()
。
(本地我用PHP 5.3。*,现场直播5.5.9。)
答案 0 :(得分:1)
实际上,在UTF8字符的情况下,你需要使用json_encode的可选参数
所以你可以使用
<强> JSON_UNESCAPED_UNICODE 强> 的选择 JSON_ENCODE
示例:
json_encode($array, JSON_UNESCAPED_UNICODE)
答案 1 :(得分:1)
虽然此处的版本日志中没有记录这一点,但5.5中的非UTF8处理行为已经发生变化,这会使调试变得困难。
将非UTF-8字符串传递给json_encode()将使该函数在PHP 5.5中返回false,而在以前的版本中它只会使该字符串(并且只有这一个)无效。
在Latin-1编码文件中,写下:
$a = array('é', 1);
var_dump(json_encode($a));
PHP&lt; 5.4:string(8) "[null,1]"
PHP&gt; = 5.5:bool(false)
PHP 5.5当然是正确的(如果编码失败,返回false)但是在更新到5.5时它可能会引入错误,因为以前你可以得到其余的JSON,即使一个字符串不是UTF8(如果这个字符串没用过,你永远不会通知它已经无效了)
答案 2 :(得分:0)
最后 - 我使用了这个要点的略微修改版本 - http://gist.github.com/oscar-broman/3653399 - 但不是编码属性 - 我正在删除所有非UTF8字符串......它正在工作。但是 - 我不得不修改网站正在使用的PHP框架......这是我真正想要避免的...... ......但无论如何,这种方法现在可以完成这项工作:) ......