使用json_encode从XML转换为json会混乱字符串的编码

时间:2017-01-28 01:31:18

标签: php json xml encoding utf-8

我有一个接收XML结构的字符串。 其中一个元素包含汉字。 为了将XML转换为json,我使用json_encode()。中文字符的输出是乱码。

我尝试使用mb_detect_encoding检查编码,甚至尝试了列出的解决方案here

我用google搜索了很多其他资源,但似乎没有一个能解决我的问题。任何帮助深表感谢。

代码:

<?php
$str = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<rootjson>
  <widget>
    <debug>on</debug>
    <text>
      <data>點擊這裡</data>
      <size>36</size>
      <alignment>center</alignment>
    </text>
  </widget>
</rootjson>
XML;

$xml = simplexml_load_string($str);
if ($encoding = mb_detect_encoding($xml, 'UTF-8', true)) echo 'XML is utf8';  //It finds it to be utf8
$json = json_encode($xml, JSON_PRETTY_PRINT);
if ($encoding = mb_detect_encoding($json, 'UTF-8', true)) echo 'Json is utf8';  //It also finds it to be utf8
var_dump($json);
?>

输出:

{
    "widget": {
        "debug": "on",
        "text": {
            "data": "\u9ede\u64ca\u9019\u88e1",
            "size": "36",
            "alignment": "center"
        }
    }
}

我不认为我可以信任mb_detect_encoding,因为它告诉$ xml和$ json都是UTF-8编码的。点击这里的中文字符串现在显示为

  

\ u9ede \ u64ca \ u9019 \ u88e1

1 个答案:

答案 0 :(得分:2)

您需要的是JSON_UNESCAPED_UNICODE,请参阅php.net/manual/en/function.json-encode.php上的文档