Simplexml_load_string() ne permettent pas de parse error
Je suis en train de charger analyser un Google Météo API de réponse (réponse Chinoise).
Ici est l'appel d'API.
//This code fails with the following error
$xml = simplexml_load_file('http://www.google.com/ig/api?weather=11791&hl=zh-CN');
( ! Avertissement: simplexml_load_string()
[function.simplexml-load-string]:
Entité: ligne 1: parser error : Entrée
n'est pas correcte UTF-8, indiquer l'encodage
! Octets: 0xB6 0xE0 0xD4 0xC6 dans
C:\htdocs\weather.php sur la ligne 11
Pourquoi le chargement de cette réponse échec?
Comment puis-je encoder/décoder la réponse de sorte que simplexml
charge correctement?
Edit: Voici le code et de sortie.
<?php
$googleData = file_get_contents('http://www.google.com/ig/api?weather=11102&hl=zh-CN');
$xml = simplexml_load_string($googleData);
( ! Avertissement: simplexml_load_string()
[function.simplexml-load-string]:
Entité: ligne 1: parser error : Entrée
n'est pas correcte UTF-8, indiquer l'encodage
! Octets: 0xB6 0xE0 0xD4 0xC6 dans
C:\htdocs\test4.php sur la ligne 3 Appel
Pile
Temps Mémoire Fonction Emplacement 1 0.0020 314264 {principal}(
) ..\test4.php:0
2 0.1535 317520 simplexml_load_string
( chaîne de caractères(1364) ) ..\test4.php:3( ! Avertissement: simplexml_load_string()
[function.simplexml-load-string]:
t_system
data="ES"/>( ! Avertissement: simplexml_load_string()
[function.simplexml-load-string]: ^
C:\htdocs\test4.php sur la ligne 3 Appel
Pile
Temps Mémoire Fonction Emplacement 1 0.0020 314264 {principal}(
) ..\test4.php:0
2 0.1535 317520 simplexml_load_string
( chaîne de caractères(1364) ) ..\test4.php:3
OriginalL'auteur John Himmelman | 2010-05-24
Vous devez vous connecter pour publier un commentaire.
Le problème ici est que SimpleXML n'a pas l'air à l'en-tête HTTP pour déterminer le codage des caractères utilisé dans le document et suppose simplement que c'est de l'UTF-8 même si le serveur Google ne fait la publicité comme
Vous pouvez écrire une fonction qui va prendre un coup d'oeil à cet en-tête à l'aide de la super-secret de la magie variable
$http_response_header
et de transformer la réponse en conséquence. Quelque chose comme ça:⁄
qui est un/
OriginalL'auteur Josh Davis
Mise à jour: je peux reproduire le problème. Aussi, Firefox est auto-reniflant le caractère défini comme "chinois simplifié" quand je suis sortie de la raw de flux XML. Le Google alimentation est de servir des données incorrectes (Chinois Simplifié caractères au lieu de UTF-8), ou c'est de servir les différentes données lorsqu'il n'est pas récupéré dans un navigateur - la-tête content-type dans Firefox clairement dit
utf-8
.La conversion de la source entrante à partir de Chinois Simplifié (GB18030, c'est ce que Firefox m'a donné) en UTF-8 fonctionne:
il n'a pas d'expliquer ni à résoudre le problème sous-jacent encore, cependant. Je n'ai pas le temps de prendre un regard profond en ce moment, peut-être quelqu'un d'autre ne le fait. Pour moi, il semble comme Google sont en fait servir des données incorrectes (ce qui me surprendrait. Je ne savais pas qu'ils faisaient des erreurs comme nous autres mortels. :P)
attends, je vais l'essayer.
voir ma mise à jour.
Merci! Au moins maintenant je peux sentir bien de savoir que ce n'était pas mon code qui a cassé le système xD.
vous êtes les bienvenus. J'ai peut-être tort, mais la façon dont il ressemble, ce qui semble effectivement être défectueuse des données.
OriginalL'auteur Pekka 웃
Juste tombé sur cette.
Cela semble fonctionner (la fonction elle-même que j'ai trouvé sur le web, il suffit de mettre à jour un peu).:
OriginalL'auteur AR.
C'est le script que j'ai fait en php pour parser Google Météo API.
OriginalL'auteur cmluscco
Essayer d'ajouter dans l'url le paramètre de requête oe = utf-8. Dans ce cas, la réponse sera exclusivement le codage UTF-8. Il m'a aidé.
OriginalL'auteur Igor Vakulenko