Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1317 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  DOM : gérer les erreurs de syntaxe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DOM : gérer les erreurs de syntaxe

n°1586984
thekiller2​42
Posté le 16-07-2007 à 11:42:05  profilanswer
 

Hello :) ,
 
Je suis entrain de créer un un parseur xml dont le but sera de parser des balises comme <gras>texte</gras> en texte.
 
Voici mon code :  

Code :
  1. <?php
  2. error_reporting(E_ALL ^ E_NOTICE);
  3. function parsage($texte){
  4.   $texte = '<zcode>'.$texte.'</zcode>';
  5.   $document_xml = new DomDocument;
  6.   $texte = utf8_encode($texte);
  7.   $document_xml->loadXML($texte);
  8.   $elements = $document_xml->getElementsByTagName('zcode');
  9.   $resultat_html = '';
  10.   $arbre = $elements->item(0);
  11.   $resultat_html = parsage_enfant($arbre);
  12.   return utf8_decode($resultat_html);
  13. }
  14. function parsage_normal($noeud, $contenu_a_inserer='')
  15. {
  16.      $balise_1 = array('gras' => '<strong>',
  17.                                                                 'souligne' => '<div class="souligne">',
  18.                                                                 'barre' => '<div class="barre">',
  19.                                 'italique' => '<em>',
  20.                                 'position' => '<div class="$1">',
  21.                                 'flottant' => '<div class="flot_$1">',
  22.                                 'taille' => '<span class="$1">',
  23.                                 'couleur' => '<span class="$1">',
  24.                                 'police' => '<span class="$1">',
  25.                                 'attention' => '<div class="rqm attention">',
  26.                                                                 'information' => '<div class="rqm information">',
  27.                                                                 'erreur' => '<div class="rqm erreur">',
  28.                                                                 'question' => '<div class="rqm question">',
  29.                                 'liste' => '<ul>',
  30.                                 'puce' => '<li>',
  31.                                 'lien' => '<a href="$1">',
  32.                                 'image' => '<img src="$1" alt="$2" />',
  33.                                 'citation' => ' <span class="citation">Citation</span><div class="citation2">',
  34.                                                                 'titre1' => '<h3>',
  35.                                                                 'titre2' => '<h4>',
  36.                                                                 'email' => '<a href="mailto:$1">',
  37.                                                                 'secret' =>'<span class="spoiler">Secret (cliquez pour afficher)</span><div class="spoiler2" onclick="switch_spoiler(this)"><div style="visibility: hidden;" class="spoiler3">',
  38.                                 '#text' => ''); // Tableau des balises ouvrantes
  39.                                              
  40. $balise_2 = array('gras' => '</strong>',
  41.                                                                 'souligne' => '</div>',
  42.                                                                 'barre' => '</div>',
  43.                                 'italique' => '</em>',
  44.                                 'position' => '</div>',
  45.                                 'flottant' => '</div>',
  46.                                 'taille' => '</span>',
  47.                                 'couleur' => '</span>',
  48.                                 'police' => '</span>',
  49.                                 'attention' => '</div>',
  50.                                 'information' => '</div>',
  51.                                                                 'erreur' => '</div>',
  52.                                                                 'question' => '</div>',
  53.                                 'liste' => '</ul>',
  54.                                 'puce' => '</li>',
  55.                                 'lien' => '</a>',
  56.                                 'image' => '',
  57.                                 'citation' => '</div>',
  58.                                                                 'titre1' => '</h3>',
  59.                                                                 'titre2' => '</h4>',
  60.                                                                 'email' => '</a>',
  61.                                                                 'secret' => '</div></div>     
  62. </div>',
  63.                                 '#text' => ''); // Tableau des balises fermantes
  64. $attributs = array('position' => 'valeur',
  65.                                 'flottant' => 'valeur',
  66.                                 'taille' => 'valeur',
  67.                                 'couleur' => 'nom',
  68.                                 'police' => 'nom',
  69.                                 'lien' => 'url',
  70.                                 'image' => 'legende',
  71.                                                                 'email' => 'nom'); // Tableau des attributs
  72.                                                              
  73.         $nom = $noeud->nodeName; // On récupère le nom du noeud
  74.      
  75.         if(!empty($contenu_a_inserer)) // On détermine si on veut spécifier du contenu pré-parsé.
  76.         {
  77.                 $contenu = $contenu_a_inserer; // Si c'est le cas, on met la variable de fontion en contenu
  78.         }
  79.         else
  80.         {
  81.                 $contenu = $noeud->nodeValue; // Sinon, le contenu du noeud.
  82.         }
  83.      
  84.         $premiere_balise = $balise_1[$nom];     // Première balise (ouvrante)
  85.      
  86.         if($noeud->hasAttributes() and $nom != 'image') // On remplace les attributs (sauf pour les images)
  87.         {           
  88.                      
  89.                 $un = $noeud->attributes->getNamedItem($attributs[$nom])->nodeValue; // Récupération de la valeur de l'attribut
  90.                 $premiere_balise = str_replace("$1", $un, $premiere_balise); // On remplace la valeur $1 par celle de l'attribut
  91.              
  92.         }
  93.      
  94.         if($nom == 'image') // Cas particulier des images
  95.              
  96.         {
  97.                 $un = $contenu; // Dans ce cas, c'est $1 qui récupère le contenu du noeud (l'url de l'image).
  98.                 $premiere_balise = str_replace("$1", $un, $premiere_balise);
  99.              
  100.                 if($noeud->hasAttributes()) // Si l'image contient une légende (attribut $2)
  101.              
  102.                 {
  103.                         $deux = $noeud->attributes->getNamedItem('legende')->nodeValue; // Récupération de l'attribut "legende".
  104.                 }
  105.                 else // Par défaut, la légende (alt) est Image.
  106.                 {
  107.                         $deux = 'Image';
  108.                 }
  109.      
  110.                 $premiere_balise = str_replace("$2", $deux, $premiere_balise);
  111.                 $intermediaire = $premiere_balise;
  112.      
  113.         }
  114.         else // Cas général
  115.         {
  116.                $intermediaire = $premiere_balise . $contenu . $balise_2[$nom]; // On assemble le tout
  117.                 if($nom == 'liste'  or $nom == 'puce')
  118.                 {
  119.                         $intermediaire = preg_replace("#<ul>(\s)*<li>#sU", "<ul><li>", $intermediaire);
  120.                         $intermediaire = preg_replace("#</li>(\s)*<li>#sU", "</li><li>", $intermediaire);
  121.                         $intermediaire = preg_replace("#</li>(\s)*</ul>#sU", "</li></ul>", $intermediaire);
  122.                 }
  123.              
  124.                 if($nom == 'zcode')
  125.                 {
  126.                         $intermediaire = nl2br($intermediaire); // On saute des lignes au résultat final
  127.                 }
  128.         }
  129.         return $intermediaire; // On renvoie le texte parsé.
  130. }
  131. function parsage_enfant($noeud)// Fonction de parsage d'enfants
  132. {
  133.         if(!isset($accumulation)) // Si c'est la première balise, on initialise $accumulation
  134.         {
  135.                 $accumulation = '';
  136.         }
  137.      
  138.         $enfants_niv1 = $noeud->childNodes; // Les enfants du noeud traité
  139.      
  140.         foreach($enfants_niv1 as $enfant) // Pour chaque enfant, on vérifie...
  141.         {
  142.                 if($enfant->hasChildNodes() == true) // ... s'il a lui-même des enfants
  143.                 {
  144.                         $accumulation .= parsage_enfant($enfant); // Dans ce cas, on revient sur parsage_enfant
  145.                 }
  146.                 else // ... s'il n'en a plus !
  147.                 {
  148.                         $accumulation .= parsage_normal($enfant); // On parse comme un noeud normal
  149.                 }
  150.         }
  151.         return parsage_normal($noeud, $accumulation);
  152. }
  153. ?>


 
Voila, tout est fonctionnel, le seul problème, c'est que site un visiteur tape ce code là par exemple :
<souligne>test</soulignes>
Il y a une erreure de syntaxe, et php m'envoie un beau petit message d'erreur :
 
Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: expected '>' in Entity, line: 1 in C:\Documents and Settings\Administrateur\Bureau\Quentin\Sites\zcode\zcode.php on line 8
 
Warning: Invalid argument supplied for foreach() in C:\Documents and Settings\Administrateur\Bureau\Quentin\Sites\zcode\zcode.php on line 143
 
Fatal error: Call to a member function hasAttributes() on a non-object in C:\Documents and Settings\Administrateur\Bureau\Quentin\Sites\zcode\zcode.php on line 89

 
 
J'aimerais savoir comment gérer facilement et simplement les erreurs de syntaxe.
 
Merci d'avance.

mood
Publicité
Posté le 16-07-2007 à 11:42:05  profilanswer
 

n°1587000
cgo2
Dum spiro spero
Posté le 16-07-2007 à 11:59:47  profilanswer
 

http://fr.php.net/manual/fr/functi [...] errors.php


---------------
When it's from Finland it's good.  - Mon blog
n°1587017
thekiller2​42
Posté le 16-07-2007 à 12:16:40  profilanswer
 


 
Exact :) .
Tuto sur DOM, j'essaye de mis mettre.
Le zcode est quand même bien plus puissant que le bbcode.
 
Je regarde le liens de la doc.
 

n°1587025
thekiller2​42
Posté le 16-07-2007 à 12:24:56  profilanswer
 

J'ai également un autre problème.
Si je fait ça :  
<image legende="legende de l'image">url de l'image</image>
En local, ça marche niquel, mais en ligne, (1and1.fr), ça m'affiche un message d'erreur :  
 
Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: AttValue: " or ' expected in Entity, line: 1 in /homepages/46/d210330404/htdocs/zcode/zcode.php on line 10
 
Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: attributes construct error in Entity, line: 1 in /homepages/46/d210330404/htdocs/zcode/zcode.php on line 10
 
Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: Couldn't find end of Start Tag image line 1 in Entity, line: 1 in /homepages/46/d210330404/htdocs/zcode/zcode.php on line 10
 
Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: Opening and ending tag mismatch: zcode line 1 and image in Entity, line: 1 in /homepages/46/d210330404/htdocs/zcode/zcode.php on line 10
 
Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: Extra content at the end of the document in Entity, line: 1 in /homepages/46/d210330404/htdocs/zcode/zcode.php on line 10
 
Warning: Invalid argument supplied for foreach() in /homepages/46/d210330404/htdocs/zcode/zcode.php on line 149
 
Fatal error: Call to a member function hasAttributes() on a non-object in /homepages/46/d210330404/htdocs/zcode/zcode.php on line 95
 
http://www.robotix.fr/zcode/

n°1587037
Le_nain
Posté le 16-07-2007 à 12:45:27  profilanswer
 

http://fr.php.net/manual/fr/functi [...] errors.php
 
Tu pourras retrouver les erreurs grâce à ça normalment :)
 
Savage

n°1611476
thekiller2​42
Posté le 13-09-2007 à 18:13:55  profilanswer
 

Heu, nan, j'arrive pas :p .
Faudrait que tu me donnes ta méthode bien moche NazzTazz.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  DOM : gérer les erreurs de syntaxe

 

Sujets relatifs
Débutante en Java et erreurs incomprisescomment gérer les fichiers dans son programme
[JAVA] Question de syntaxemessages d'erreurs JOUR2/ASKEET/SYMFONY
Gérer un clic sur un label, possible?Comment gérer un formulaire dynamique de recherche
Gérer une newsletter avec plusieurs milliers de membresutiliser base et calc pour gerer une base de donnee
Petite erreure de syntaxe ? introuvable !Syntaxe de mysql dans php
Plus de sujets relatifs à : DOM : gérer les erreurs de syntaxe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR