Sto utilizzando l'API di Google Meteo per un widget.Errore di analisi xml: "Carattere non valido"
Tutto è bene e dandy, tranne che oggi ho incontrato un problema che non riesco a risolvere. Quando chiamato con questa posizione:
http://www.google.com/ig/api?weather=dunjkovec,medimurska,croatia&hl=en
ottengo questo errore:
XML parse error 9 'Invalid character' at line 1, column 169 (byte index 199)
Ho il sospetto che il problema è qui: Nedelišće
Il blocco di codice è questo:
$parser = xml_parser_create('UTF-8');
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
$ok = xml_parse_into_struct($parser, $data, $values);
if (!$ok) {
$errmsg = sprintf("XML parse error %d '%s' at line %d, column %d (byte index %d)",
xml_get_error_code($parser),
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser),
xml_get_current_column_number($parser),
xml_get_current_byte_index($parser));
}
$ dati è l'aria la tenda dei valori xml e $ è vuota.
Qualcuno può aiutarmi? Grazie mille!
EDIT ----------------------------------
Dopo aver letto il post di Hussein ho scoperto che il problema è nel modo in cui il file viene recuperato.
ho cercato file_get_contents e cURL. Entrambi i rendimenti:
che è la linea che crea problemi. O così ho pensato! Ho provato questo html_entity_decode ($ data, ENT_NOQUOTES, 'UTF-8') e non funzionava, quindi ho fatto una scoperta, non posso echo il contenuto dell'xml, posso solo stamparli e vedere i risultati in la fonte html! Con qualsiasi altra posizione nel mondo funziona, solo questo crea problemi ... Voglio piangere :-(
EDIT 2 -------------------- ------------
Per qualcuno che si preoccupa ho fissato il problema con queste linee di codice dopo il recupero del file XML dal api:.
$data = mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data, 'UTF-8, ISO-8859-1', true));
$data = html_entity_decode($data,ENT_NOQUOTES,'UTF-8');
poi analizzare il codice XML , ha funzionato come un fascino Ho segnato la risposta di hussein perché mi ha messo sulla strada giusta
Qual è la tua versione di PHP? – Tomalak
La versione PHP potrebbe essere un problema con la codifica. Google identifica correttamente l'XML come UTF-8 nell'intestazione, ma non nella dichiarazione XML. Come stai recuperando e memorizzando l'XML prima di caricarlo? A seconda della configurazione dell'ambiente, suppongo sia possibile che sia stato convertito implicitamente in ISO-8859-1 a un certo punto, il che causerebbe l'errore di carattere non valido quando è caricato. –
Congratulazioni! È una soluzione ancora migliore .. Grazie per aver condiviso :) – eHussain