xml, simple_xml, php et caracteres spéciaux

Mammouth du PHP | 504 Messages

26 mars 2012, 10:30

bonjour,

J'ai un xml qui me parvient d'une API et qui contient des "&" que je veux remplacer par "&".

J'ai donc écrit ça:

Code : Tout sélectionner

<?php $Slideshows_xml = simplexml_load_file('test.xml'); str_replace("&", "&", $Slideshows_xml); foreach ($Slideshows_xml ->Slideshow as $Slideshow) { print "Nom de Slideshow: {$Slideshow->Title} <br />\n"; print "Id de Slideshow: {$Slideshow->ID} <hr />\n"; } ?>
ça ne fonction pas, on ne peut par utiliser un str_replace avec un xml ?

Merci de votre aide

Eléphant du PHP | 267 Messages

26 mars 2012, 11:06

salut,

il faut écrire :
$Slideshows_xml = str_replace("&", "&", $Slideshows_xml);
car c'est la valeur de retour de la fonction str_replace qui contient les modifications

@+
dix2

Mammouth du PHP | 504 Messages

26 mars 2012, 11:22

Non, ça ne marche pas ??? On dirait que str_replace ne fonctionne pas sur un xml.

ViPHP
xTG
ViPHP | 7331 Messages

26 mars 2012, 13:17

Question d'encodage ? Certaines fonctions de PHP ne fonctionnent que sur de l'iso par exemple.

Mammouth du PHP | 504 Messages

26 mars 2012, 13:30

Je m'arrache les cheveux sur ce xml.

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <Slideshows> <Slideshow> <ID>7470120</ID> <Title>Oral cancer du sein</Title> <Status>2</Status><Created>Thu Mar 31 16:57:38 -0500 2011</Created> <Updated>Thu Mar 31 17:18:04 -0500 2011</Updated> <Language>fr</Language> <Format>ppt</Format> <Download>1</Download> <DownloadUrl>http://domaine.com/ppt-download/oralcancerdusein-110331165741-phpapp02.ppt?response-content-disposition=attachment&Signature=wgMHpIUGyoY4nwKbFciEPgPrOPg%3D&Expires=1332749418&AWSAccessKeyId=AKIAJLJT267DEGKZDHEQ</DownloadUrl> <SlideshowType>0</SlideshowType> <InContest>0</InContest> </Slideshow> <Slideshow> <ID>7470382</ID> <Title>Oral cancer du sein</Title> <Description/> <Status>2</Status> <Created>Thu Mar 31 17:38:57 -0500 2011</Created> <Updated>Thu Mar 31 17:55:13 -0500 2011</Updated> <Language>fr</Language> <Format>ppt</Format> <Download>1</Download> <DownloadUrl>http://domaine.com/ppt-download/oralcancerdusein-110331173902-phpapp02.ppt?response-content-disposition=attachment&Signature=2y7hQOSb80mhnPtE9Fnm7vmDKP0%3D&Expires=1332749418&AWSAccessKeyId=AKIAJLJT267DEGKZDHEQ</DownloadUrl> <SlideshowType>0</SlideshowType> <InContest>0</InContest> </Slideshow> </Slideshows>
Et je veux le aprse sauf que les "&" m'en empeche.

J'ai essayé:
<?php
 $Slideshows_xml = simplexml_load_file('test.xml');
 $Slideshows_xml = str_replace("&", "&", $Slideshows_xml);

 foreach ($Slideshows_xml ->Slideshow as $Slideshow) {
     print "Nom de Slideshow:{$Slideshow->Title} <br />\n";
     print "Id de Slideshow: {$Slideshow->ID} <hr />\n";

 }
?>
ça ne marche pas.

Code : Tout sélectionner

<?php $file=load('test.xml'); $dom = new DomDocument(); $dom->load($file); $xpath = new DOMXPath($dom); $arts = $xpath->query("/Slideshows/Slideshow/Title"); foreach ($arts as $art) { echo $art->nodeValue.""; } ?>
ça non plus.

Bref, si quelqu'un a une idée c'est bien venu.

A noté que le xml de base est fourni par une API donc je ne peux pas le modifier.
La méthode consisterait à charger le xml, remplacer les "&" et parser le résultat.

ViPHP
xTG
ViPHP | 7331 Messages

26 mars 2012, 14:25

Ah oui j'avais lu un peu vite...
Lorsque tu créés ton objet simple_xml ça te renvoie.... Un objet !
Or str_replace() fonctionne sur une string et renvoie une string.

Donc allons par étape, le parsage du XML c'est la création de l'objet. Cela se fait-il sans erreur avant de penser au reste ?

Mammouth du PHP | 504 Messages

26 mars 2012, 14:40

En fait je bosse sur un fichier test là en local. Si j'ouvre ce fichier dans mon navigateur, j'ai rien. (fichier xml, ci dessous)

Par contre sur le fichier envoyé par l'api (je te l'ai parvenir en mp) alors la il s'affiche. Je ne saisi vraiment. Il s'affiche alors qu'il contient des caracteres speciaux et pas de CDATA ??

ViPHP
xTG
ViPHP | 7331 Messages

26 mars 2012, 15:48

Si tu testes avec un fichier de test, ce fichier a-t-il été enregistré avec l'encodage utf8 ? ^^
Concernant le lien envoyé par MP il m'amène vers un fichier XML m'informant que la clé est incorrecte.

Mammouth du PHP | 504 Messages

26 mars 2012, 16:42

Résolu Merci.