Simplexml_load_string () kann den Fehler nicht analysieren

7

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

    
John Himmelman 24.05.2010, 18:26
quelle

5 Antworten

20

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:

%Vor%     
Josh Davis 25.05.2010, 03:28
quelle
4

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)

    
Pekka 웃 24.05.2010 18:37
quelle
2

Gerade ist das passiert. Das scheint zu funktionieren (die Funktion selbst, die ich im Internet gefunden habe, habe sie nur ein wenig aktualisiert).:

%Vor%     
AR. 09.11.2010 23:55
quelle
1

Dies ist das Skript, das ich in PHP erstellt habe, um die Google Weather API zu analysieren.

%Vor%     
cmluscco 24.05.2011 15:57
quelle
1

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%     
Igor Vakulenko 10.02.2012 14:24
quelle