Preg_replace limitée à l'intérieur de balises

matt_info Messages postés 1 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

Je souhaiterais développer un petit outil qui remplace les guillemets doubles par l'entité équivalente (") sauf lorsque ces guillemets sont à l'intérieur de balises html.
Ex :
<strong style="color:red;">Je suis entre "guillemets"</strong>. Et toi "aussi"<strong style="color:red;">Les "guillemets"</strong>. (résultat à l'écran, pas le code HTML source qui lui a par exemple <strong> pour une balise strong)

Devrait donner :
<strong style="color:red;">Je suis entre &quot;guillemets&quot;</strong>. Et toi &quot;aussi&quot;<strong style="color:red;">Les &quot;guillemets&quot;</strong>.

J'ai essayé plein de regexp notamment /&amp;quot;(?=.*[^(&lt;)])/ mais pas moyen de trouver la bonne.

Merci de votre aide !

1 réponse

  1. Utilisateur anonyme
     
    Salut salut,

    J'en suis pas très fière mais c'est un petit bout de script fonctionnel d'une fonction dont je me servais : les deux chaines de départ sont pour les tests :
    <?php
    $chaine="\"guillemet\"<td align=\"right\">Objectif \"guillemet\":</td><td><textarea name=\"objectif\" cols=\"50\" rows=\"10\">\"guillemet\"</textarea></td>\"guillemet\"";
    $chaine2=$chaine="<td align=\"right\">Objectif \"guillemet\":</td><td><textarea name=\"objectif\" cols=\"50\" rows=\"10\">\"guillemet\"</textarea></td>";
    $tab=explode("<",$chaine2);
    
    $save=array();
    $count1=count($tab);
    for($i=0;$i<$count1;$i++){
     $tab2=explode(">",$tab[$i]);
    
     if($i==0){
      $save[$i][0]=(!empty($tab2[0])) ? str_replace("\"","'",$tab2[0]) : "";
     }else{
    $count2=count($tab2);
      if($count2>1){
       $save[$i][0]="<".$tab2[0].">";
       $save[$i][1]=str_replace("\"","'",$tab2[1]);
      }else{
       $save[$i][0]="<".$tab2[0].">";
      }
     }
    }
    
    $str="";
    for($i=0;$i<count($save);$i++){
     for($j=0;$j<count($save[$i]);$j++){
      $str.=$save[$i][$j];
     }
    }
    echo htmlentities($str);
    ?>

    Le mieux pour toi est de concaténer directement, je ne sais plus pourquoi je mettais ça dans un tableau
    Si tu veux des précisions n'hésite pas.
    Résolu? ===> [RESOLU]
    0