[DOM/XML/PHP] & dans texte = erreur de parsing

& dans texte = erreur de parsing [DOM/XML/PHP] - XML/XSL - Programmation

Marsh Posté le 07-03-2005 à 19:22:42    

Bonjour.
 
voila j'ai un petite probleme et j'ai un peu du mal a le cerner
 
j'utilise ce petit bout de code pour importer du texte contenant des balise dans mon document XML.  

Code :
  1. private function ajouterNoeuds($parent,$nom,$valeur){
  2.   $dom = new DOMDocument('1.0', 'iso-8859-1');
  3.   $dom->loadXML("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><$nom>$valeur</$nom>" );
  4.   $items = $dom->getElementsByTagName($nom);
  5.   $dom = $this->importNode($items->item(0),true);
  6.   return $parent->appendChild($dom);
  7.  }


 
cela marche plutot bien sauf (pour le moment dans un cas): il suffi qu'il traine un tout petit "&" dans le texte pour que l'import foire lamentablement.  
 
et des & il y en a pas mal dans les URLs. donc ça me gene un peu.
 
Est ce que quelqu'un sait pourquoi le & fore lamentablement mon parsing.
 
exemple si j'ai:

Code :
  1. http://www.deepnight.net/core.php? [...] rticle=133


 
et ba ça plante.
 
 
merci d'avance

Reply

Marsh Posté le 07-03-2005 à 19:22:42   

Reply

Marsh Posté le 07-03-2005 à 19:59:05    

Oui, il ne faut jamais mettre de '&' tous seuls dans une URL. Ceci parce que les url sont des sections PCDATA. Donc ton browser (ou un parseur XML) va trouver un &, puis chercher jusqu'à trouver un point-virgule pour déterminer une entité. Et il ne va jamais trouver ce point-virgule, parce qu'il y en a pas.
 
En termes plus simples, comme tu doit le savoir, y'a des trucs genre &eacute;, &eagrave;... Ce qu'on appelle des entités. Et le parseur, quand il voit un &, il s'attend à trouver une entité... Qu'il ne trouve pas.  
 
Donc il faut remplacer tous les & par des &amp; :

http://www.deepnight.net/core.php?idSection=16&amp;idArticle=133

Reply

Marsh Posté le 07-03-2005 à 20:38:32    

merci beaucoup.  
tu m'evites une recherche longue et laborieuse.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed