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

matt_info Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 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

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