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()
。在本地和现场,我尝试使用一个相同的数据,结果是:

  • 在本地,它返回JSON,但一些值被转换为
    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)