Code : Tout sélectionner
<a href='toto'>toto</a>
Code : Tout sélectionner
<a href='<span style='background-color:#ffff66'>toto</span>'>toto</a>
Bref après avoir cherché une solution avec les expressions régulières dont voici des ducumentations interessantes:
Cours sur les expressions régulières
Syntaxe des masques (cours)
syntaxe des masques (nexen)
Documentation sur preg_replace
J'ai "dévellopé" une fonction spécifique que voici:
Code : Tout sélectionner
<?
/** Fonction surligner
@param $donne : chaine de caractère donnée, un texte pouvant contenir de l'HTML
@param $recherche: chaine de caractère, mot à souligner
@return une chaine de caractère au format HTML dont toutes les occurences (en ignorant la casse) de
$recherche contenus dans $donnee n'étant pas dans des balises HTML ont été surlignées*/
function surligner($donne, $recherche) {
if (strlen($recherche) == 0) return $donne;
$j = 0;
$balise = false;
$tmp = "";
$sortie = "";
for ($i = 0; $i < strlen($donne); $i++) {
//Détection de balises HTML
if (strcmp($donne[$i] ,"<")==0) {
//Début d'une balise HTML
$balise = true;
} else {
if ( ($balise) && (strcmp($donne[$i],">")==0) ) {
//Fin d'une balise HTML
$balise = false;
}
}
if (!$balise) {
//Nous ne sommes pas dans une balise
if ($j == (strlen($recherche) - 1) ) {
//Traitement du dernier élément de $recherche
if (strcmp(strtolower($recherche[$j]),strtolower($donne[$i]))==0) {
//Recherche trouvé, on surligne
$sortie .= "<span style='background-color:#ffff66'>" . $tmp . $donne[$i] . "</span>";
} else {
//Recherche non trouvé, on laisse tel quel
$sortie .= $tmp . $donne[$i];
}
//RAZ de la "recherche"
$j = 0;
$tmp = "";
} else {
//Comparaison ignorant la casse
if (strcmp(strtolower($recherche[$j]),strtolower($donne[$i]))==0) {
//construction de la chaine temporaire
$tmp .= $donne[$i];
//Avancer la recherche
$j++;
} else {
//Recherche non trouvé, on laisse tel quel
//On ajoute la chaine tmp qui peut être non vide
//cas une partie était identique à $recherche
$sortie .= $tmp . $donne[$i];
//RAZ de la "recherche"
$tmp = "";
$j = 0;
}
}
} else {
//Nous sommes dans une balise, nous ne fesons que recopier
//Recopie
$sortie .= $donne[$i];
}
}
return $sortie;
}
?>