Simplexml_load_string() fehl parse error
Ich versuche zu laden, analysiert der Google Wetter API-Antwort (Chinesisch Reaktion).
Hier ist der API-Aufruf.
//This code fails with the following error
$xml = simplexml_load_file('http://www.google.com/ig/api?weather=11791&hl=zh-CN');
( ! Warnung ) Warning: simplexml_load_string()
[Funktion.simplexml-load-string]:
Entity: line 1: parser error : Input
is not proper UTF-8, indicate encoding
! Bytes: 0xB6 0xD4 0xE0 0xC6 in
C:\htdocs\weather.php in Zeile 11
Warum laden diese Antwort nicht?
Wie muss ich enkodieren/Dekodieren, die Antwort, so dass simplexml
lädt es richtig?
Edit: Hier ist der code und die Ausgabe.
<?php
$googleData = file_get_contents('http://www.google.com/ig/api?weather=11102&hl=zh-CN');
$xml = simplexml_load_string($googleData);
( ! Warnung ) Warning: simplexml_load_string()
[Funktion.simplexml-load-string]:
Entity: line 1: parser error : Input
is not proper UTF-8, indicate encoding
! Bytes: 0xB6 0xD4 0xE0 0xC6 in
C:\htdocs\test4.php auf der Linie 3 Nennen
Stack
Time Memory Function Location 1 0.0020 314264 {main}(
) ..\test4.php:0
2 0.1535 317520 simplexml_load_string
( string(1364) ) ..\test4.php:3( ! Warnung ) Warning: simplexml_load_string()
[Funktion.simplexml-load-string]:
t_system
data="SI"/>( ! Warnung ) Warning: simplexml_load_string()
[Funktion.simplexml-load-string]: ^ in
C:\htdocs\test4.php auf der Linie 3 Nennen
Stack
Time Memory Function Location 1 0.0020 314264 {main}(
) ..\test4.php:0
2 0.1535 317520 simplexml_load_string
( string(1364) ) ..\test4.php:3
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier das problem, dass SimpleXML nicht betrachten der HTTP-header zu bestimmen, die Zeichencodierung im Dokument verwendet wird und einfach davon ausgegangen, es ist UTF-8, obwohl Google ' s server keine Werbung dafür machen, wie
Können Sie eine Funktion schreiben, die einen Blick auf die Kopfzeile mit dem super-geheime Magische variable
$http_response_header
und verwandeln die Antwort entsprechend. Sowas:⁄
was ist ein/
Update: ich kann das problem reproduzieren. Auch Firefox ist auto-sniffing den Zeichensatz als "Vereinfachtes Chinesisch", wenn ich die Ausgabe der raw-XML-feed. Entweder die Google-Futter zu dienen, falsche Daten (Vereinfachtes Chinesisch Zeichen anstelle von UTF-8 sind), oder es wird mit unterschiedlichen Daten, wenn nicht geholt, der in einem browser - content-type-header in Firefox sagt ganz klar
utf-8
.Umwandeln des eingehenden feed von Chinesisch Vereinfacht (GB18030, ist das, was Firefox gab mir) in UTF-8 funktioniert:
es nicht erklären, noch zu beheben das zugrunde liegende problem aber noch. Ich habe nicht die Zeit zu nehmen, einen tiefen Blick in dieses Recht jetzt, vielleicht jemand anderes tut. Für mich sieht es aus wie Google sind in der Tat dienen fehlerhaften Daten (was mich überraschen würde. Ich wusste nicht, dass Sie Fehler gemacht wie uns sterblichen. :P)
Kam gerade über diese.
Dies scheint zu funktionieren (die Funktion selbst, die ich im web gefunden, nur aktualisiert es ein bisschen).:
Dies ist das Skript, das ich gemacht habe in php zu Parsen, Google Wetter API.
Versuchen, fügen Sie in die url-query-parameter eo = utf-8. In diesem Fall, die Antwort wird ausschließlich die UTF-8-Codierung. Es hat mir geholfen.