Php json_encode()将非UTF8字符串转换为null,但在实时站点上返回false
在我必须用于项目的框架中(锂),特定页面上的输出通过Php json_encode()将非UTF8字符串转换为null,但在实时站点上返回false,php,utf-8,null,json,Php,Utf 8,Null,Json,在我必须用于项目的框架中(锂),特定页面上的输出通过json\u encode()。在本地和现场,我尝试使用一个相同的数据,结果是: 在本地,它返回JSON,但一些值被转换为null 实时站点-返回false 在这两种情况下,当我运行json\u last\u error()-它会给我int(5)。如果某些设置导致问题,我可以在两个位置上运行phpinfo()。 (在本地我使用PHP5.3.*,在live上是5.5.9。)实际上,如果是UTF8字符,您需要使用json_encode的可选参数 所
json\u encode()
。在本地和现场,我尝试使用一个相同的数据,结果是:
null
false
json\u last\u error()
-它会给我int(5)
。如果某些设置导致问题,我可以在两个位置上运行phpinfo()
。
(在本地我使用PHP5.3.*,在live上是5.5.9。)实际上,如果是UTF8字符,您需要使用json_encode的可选参数 所以你可以用 JSON\u UNESCAPED\u UNICODE 选择 例如:
json_encode($array, JSON_UNESCAPED_UNICODE)
最后,我使用了这个要点的一个稍加修改的版本——但不是编码属性——我删除了所有非UTF8字符串。。。它正在工作。但是-我不得不修改网站使用的PHP框架。。。这是我一直在努力避免的。。。但不管怎么说,这种方法现在起作用了:) 访问 尽管在这里的版本日志中没有记录这一点,但在5.5中,非UTF8处理行为发生了变化,这可能会使调试变得困难 在PHP5.5中,将非UTF-8字符串传递给json_encode()会使函数返回false,而在以前的版本中,它只会使该字符串(以及仅此字符串)为null 在拉丁文1编码的文件中,写入以下内容:
$a = array('é', 1);
var_dump(json_encode($a));
PHP<5.4:string(8)“[null,1]”
PHP>=5.5:bool(false)
PHP5.5当然是正确的(如果编码失败,返回false),但在更新到5.5时可能会引入错误,因为以前即使一个字符串不在UTF8中,您也可以获得JSON的其余部分(如果不使用该字符串,您永远不会通知它为空)那么您的问题是什么?我的问题是:“如何使JSON_encode()即使在提供的编码对象包含非UTF8字符的情况下也要返回JSON?“因为当前我得到了
false
…我尝试了这个,但是JSON\u encode()
仍然返回false
:(…然后如果我尝试JSON\u last\u error(),我会得到int(5)
。