Version complète: sur le forum Webmaster Hub : Problême php SimpleXml encodage
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
damien-s
Bonsoir,

J'ai un problême avec un script de récupération de données contenues dans un ficher .xml, dès qu'il y a des caractères spéciaux dans le .xml, il ne fonctonne plus ! Alors que çà marche bien si il n'y en a pas.

Sauriez-vous comment remédier à ce problême ?

CODE
<?php
// On charge le document XML
$doc = new DOMdocument();
$doc->loadXML(file_get_contents('../../AirPlayHistory.xml'));

// On get le noeud principal
$doc_event = $doc->getElementsByTagName('Event')->item(0);

// On fait la liste des noeuds Song
$doc_event_song = $doc_event->getElementsByTagName('Song');

// On liste
for($i=0; $i < $doc_event_song->length; $i++) {
    // On get le noeud actuel
    $node_song_act = $doc_event_song->item($i);
    
    // On get les 2 autres sous-noeuds
    $node_artist_act = $node_song_act->getElementsByTagName('Artist')->item(0);
    $node_info_act = $node_song_act->getElementsByTagName('Info')->item(0);

    
    // On défini les variables
    $song['title'] = $node_song_act->getAttribute('title');    
    $artist['name'] = $node_artist_act->getAttribute('name');
    $artist['ID'] = $node_artist_act->getAttribute('ID');
    $info['StartTime'] = $node_info_act->getAttribute('StartTime');
    $info['JazlerID'] = $node_info_act->getAttribute('JazlerID');
    $info['PlayListerID'] = $node_info_act->getAttribute('PlayListerID');

    
    /********************************************************************
    *** Les variables ci-dessus contiennent les infos du titre
    ********************************************************************/
    
    echo '
    <ul>
        <li><strong>Artiste</strong> : ' . htmlentities($artist['name']) . ' <em>[' . htmlentities($artist['ID']) . ']</em></li>
        <li><strong>Titre</strong> : ' . htmlentities($song['title']) . '</li>
        <li>D&eacute;marr&eacute; &agrave; ' . htmlentities($info['StartTime']) . '</li>
    </ul>';
}
?>


Lien du xml : http://radiosworld.free.fr/AirPlayHistory.xml

Page web affichant les données : http://radiosworld.free.fr/radyonne/site/xml_radyonne.php5

Merci !

Kioob
Hello,

ton fichier XML est indiqué comme étant en ISO-8859-1 dans les entêtes HTTP, mais par défaut les parseurs XML travaillent en UTF-8. Je suppose qu'il suffit "juste" ici d'indiquer à ton parseur qu'il s'agit d'ISO.

A ce que je comprends de la doc il suffit de modifier la propriété $encoding de ton objet ; mais je n'ai pas essayé.
(en fait ça se fait aussi via le constructeur, ce qui est quand même plus propre : http://fr.php.net/manual/en/domdocument.construct.php )
damien-s
Merci,

Donc ceci: $doc = new DOMdocument('1.0', 'iso-8859-1'); ?

Je test çà! smile.gif

EDIT : Pas l'air d'être çà, j'ai toujours mon erreur : http://radiosworld.free.fr/radyonne/site/xml_radyonne.php5

Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.