2017-01-28 5 views
1

У меня есть строка, которая получает структуру XML. Один из элементов содержит китайские иероглифы. Чтобы скрыть XML-код json, я использую json_encode(). Выход для китайских иероглифов искажен.Преобразование из XML в json с json_encode испортило кодировку строки

Я попытался проверить кодировку с помощью mb_detect_encoding и даже попробовал решение, указанное here.

Я столкнулся с проблемой (много) и нашел множество других ресурсов, но ни один из них, похоже, не решил мою проблему. Буду признателен за любую оказанную помощь.

Код:

<?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

.

+0

Читайте документацию: http://php.net/manual/en/function.json-encode.php. Что вам нужно, это JSON_UNESCAPED_UNICODE –

+0

Вы так правы! Большое спасибо, я посмотрел на руководство и не понимал этого. Если вы хотите официально ответить на вопросы, я могу проголосовать и отметить это. Еще раз спасибо! –

+0

Выполнено, спасибо –

ответ