2017-01-28 1 views
1

Ich habe eine Zeichenfolge, die eine XML-Struktur empfängt. Eines der Elemente enthält chinesische Zeichen. Um das XML nach json zu konvertieren, verwende ich json_encode(). Die Ausgabe für die chinesischen Zeichen ist verstümmelt.Konvertieren von XML zu Json mit Json_encode vermasselt die Codierung der Zeichenfolge

Ich versuchte, die Codierung mit mb_detect_encoding zu überprüfen und versuchte sogar die aufgelistete Lösung here.

Ich habe (viel) gegoogled und viele andere Ressourcen gefunden, aber keiner von ihnen scheint mein Problem zu lösen. Jede Hilfe wird sehr geschätzt.

Code:

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

Ausgang:

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

Ich glaube nicht, dass ich hier die mb_detect_encoding vertrauen kann, wie es ist zu sagen, dass beide $ xml und $ json UTF-8 codiert. Die chinesische Zeichenfolge 點擊 這裡 zeigt nun als

\ u9ede \ u64ca \ u9019 \ u88e1

.

+0

Lesen Sie die Dokumentation: http://php.net/manual/en/function.json-encode.php. Was Sie brauchen, ist JSON_UNESCAPED_UNICODE –

+0

Sie sind so richtig !! Vielen Dank, ich habe mir das Handbuch angeschaut und das nicht bemerkt. Wenn Sie die Fragen formell beantworten möchten, kann ich sie abstimmen und markieren. Danke noch einmal! –

+0

Fertig, danke –

Antwort