Ich versuche, eine Google Wetter API-Antwort zu parsen (chinesische Antwort).
Hier ist der API-Aufruf.
%Vor%(!) Warnung: simplexml_load_string () [function.simplexml-load-string]: Entität: Zeile 1: Parserfehler: Eingabe ist nicht richtig UTF-8, zeigen Sie die Codierung ! Bytes: 0xB6 0xE0 0xD4 0xC6 in C: \ htdocs \ weather.php in Zeile 11
Warum schlägt das Laden dieser Antwort fehl?
Wie kann ich die Antwort codieren / dekodieren, so dass simplexml
sie richtig lädt?
Bearbeiten: Hier ist der Code und die Ausgabe.
%Vor%(!) Warnung: simplexml_load_string () [function.simplexml-load-string]: Entität: Zeile 1: Parserfehler: Eingabe ist nicht richtig UTF-8, zeigen Sie die Codierung ! Bytes: 0xB6 0xE0 0xD4 0xC6 in C: \ htdocs \ test4.php in Zeile 3 Anruf Stapel Zeitspeicherfunktion Ort 1 0.0020 314264 {main} ( ) .. \ test4.php: 0 2 0.1535 317520 simplexml_load_string (Zeichenkette (1364)) .. \ test4.php: 3
(!) Warnung: simplexml_load_string () [function.simplexml-load-string]: t_system Daten="SI" / & gt;
(!) Warnung: simplexml_load_string () [function.simplexml-load-string]: ^ in C: \ htdocs \ test4.php in Zeile 3 Anruf Stapel Zeitspeicherfunktion Ort 1 0.0020 314264 {main} ( ) .. \ test4.php: 0 2 0.1535 317520 simplexml_load_string (Zeichenkette (1364)) .. \ test4.php: 3
Das Problem hier ist, dass SimpleXML den HTTP-Header nicht betrachtet, um die im Dokument verwendete Zeichencodierung zu ermitteln, und einfach davon ausgeht, dass es UTF-8 ist, obwohl der Google-Server es als
ankündigt %Vor% Sie können eine Funktion schreiben, die sich den Header mit der supergeheimen magischen Variable $http_response_header
anschaut und die Antwort entsprechend transformiert. So ähnlich:
Update: Ich kann das Problem reproduzieren. Firefox scannt den Zeichensatz automatisch als "Chinesisch vereinfacht", wenn ich den XML-Rohdaten-Feed ausgabe. Entweder liefert der Google-Feed falsche Daten (vereinfachtes Chinesisch anstelle von UTF-8), oder er liefert andere Daten, wenn er nicht in einem Browser abgerufen wird - der Inhaltstyp-Header in Firefox sagt eindeutig utf-8
.
Das Konvertieren des eingehenden Feeds von Chinesisch vereinfacht (GB18030, das hat mir Firefox gegeben) in UTF-8 funktioniert:
%Vor%es erklärt und behebt das zugrundeliegende Problem jedoch noch nicht. Ich habe momentan keine Zeit, um genau darauf einzugehen, vielleicht tut es jemand anderes. Für mich sieht es so aus, als würde Google tatsächlich falsche Daten liefern (was mich überraschen würde. Ich wusste nicht, dass sie Fehler gemacht haben wie wir Sterblichen.: P)
Versuchen Sie, den URL-Abfrageparameter eo = utf-8 hinzuzufügen. In diesem Fall lautet die Antwort ausschließlich die UTF-8-Codierung. Es hat mir geholfen.
%Vor%Tags und Links php simplexml google-weather-api