|
|
|
|
Salut,
Avec preg_replace() c'est mieux ;) En mettant en gras les mots par exemple : echo preg_replace('#\bmusée\b#i', '<b>$0</b>', $string);
\b est tout ce qui n'est pas un caractères de mot. |
Merci pour l'info, je vais tester ce soir.
Si je veux conserver ma boucle, comment met on une variable dans ta regex ? '#\b$value\b#i' ? ça passe ça ? merci d'avance Edouard |
Oui en mettant ta variable dans le pattern.
preg_replace('#\b' . $value . '\b#i', '<b>$0</b>', $string);Par contre si $value est un array, il faut procéder autrement, pas besoin de foreach()
$value = array('musée', 'monument', 'collection");
$string = preg_replace('#\b(' . implode('|', $value) . '\b#i', '<b>$0</b>', $string); |
Salut,
Je suis pas sûr de saisir ce que tu voulais faire avec implode mais finalement et grâce à ton aide, j'ai réussi à faire ce que je voulais, voici une solution à fignioler mais foncionnelle : Dans une base MySQL j'ai la structure suivante : CREATE TABLE `annuaire` ( `id` INT NOT NULL AUTO_INCREMENT , `motcle` VARCHAR( 20 ) NOT NULL , `infobulle` VARCHAR( 100 ) NOT NULL , `url` VARCHAR( 100 ) NOT NULL , `target` INT( 1 ) NOT NULL , PRIMARY KEY ( `id` ) ); Dans un fichier fonction.php j'ai cette fonction : // Retourne les valeurs remplacées de l'annuaire
function AnnuWord($chaine,$SEARCH,$REPLACE,$BIGREPLACE){
$chaine = preg_replace("[\r\s]", "", $chaine);
foreach ($SEARCH as $key => $value){
$pattern="#\b".$value."\b#";
$bigpattern="#\b".ucfirst($value)."\b#";
$replacement=$REPLACE["$key"];
$bigreplacement=$BIGREPLACE["$key"];
$chaine = preg_replace($pattern,$replacement,$chaine);
$chaine = preg_replace($bigpattern,$bigreplacement,$chaine);
}
return $chaine;
}
Dans un fichier annutool.php j'ai le script suivant : <?
// tableau de caractères spéciaux
$carspec=array("'","\"");
$carremp=array("´",""");
// Requête de remplacement
$sqlreplace=mysql_query("select* from annuaire");
$nbrlignesqlreplace=mysql_num_rows($sqlreplace);//nombre de ligne
if ($nbrlignesqlreplace=="0"){
echo AuStripSlashes("Il n'y a pas de données de remplacement !");
}//fin if
else{
while ($rowsqlreplace=mysql_fetch_array($sqlreplace))
{
// récupération des valeurs ligne à ligne
$Id_replace=$rowsqlreplace["id"];
$motcle_replace=$rowsqlreplace["motcle"];
//pour ne pas être ennuyé par les apostrophes
$infobulle_replace=str_replace($carspec,$carremp,$rowsqlreplace["infobulle"]);
$url_replace=$rowsqlreplace["url"];
$target_replace=$rowsqlreplace["target"];
//echo "$rowsqlreplace[infobulle]<br>";
//echo "$infobulle_replace";
//affectation des colonnes dans les tableaux 'SEARCH'
$SEARCH[]=$motcle_replace;
//$SEARCH[]=str_pad($motcle_replace, strlen($motcle_replace)+2, " ", STR_PAD_BOTH);
//affectation des colonnes dans les tableaux 'REPLACE'
if($target_replace=="1"){
// on utilise un target blank
$lieninfobulle="<a target=\"_blank\" href=\"".$url_replace."\" OnMouseOver=\"BulleWrite('".$infobulle_replace."');\" OnMouseOut=\"BulleHide ();\">".$motcle_replace."</a>";
$REPLACE[]=$lieninfobulle;
$BIGlieninfobulle="<a target=\"_blank\" href=\"".$url_replace."\" OnMouseOver=\"BulleWrite('".$infobulle_replace."');\" OnMouseOut=\"BulleHide ();\">".ucfirst($motcle_replace)."</a>";
$BIGREPLACE[]=$BIGlieninfobulle;
}//fin if
else{
// on ouvre le lien dans la même page
$lieninfobulle="<a href=\"".$url_replace."\" OnMouseOver=\"BulleWrite('".$infobulle_replace."');\" OnMouseOut =\"BulleHide ();\">".$motcle_replace."</a>";
$REPLACE[]=$lieninfobulle;
$BIGlieninfobulle="<a href=\"".$url_replace."\" OnMouseOver=\"BulleWrite('".$infobulle_replace."');\" OnMouseOut =\"BulleHide ();\">".ucfirst($motcle_replace)."</a>";
$BIGREPLACE[]=$BIGlieninfobulle;
}//fin else
// ensuite on appliquera le remplacement de mot dans les chaines aux variables issues de la seconde requête
}//fin while
}//fin else
?>
Dans tous les fichiers où il y a des chaînes qui pourraient contenir des mots à remplacer je traite les chaines avec la fonction comme ceci : // en haut de page 'j'initialise mon script annutool.php :
// initialisation du moteur de remplacement
if(file_exists("annutool.php")) include("annutool.php");
...
// plus loin je traite mes chaines de caractères (ici issues d'une requête sql) :
$Texte2_actualite_ligne=AnnuWord($row["Texte2_actualite"],$SEARCH,$REPLACE,$BIGREPLACE);
A améliorer par qqn qui connait la programmation objet pour faire une vraie class, son initialisation et une fonction propre, mais bon déjà ça marche ! Edouard |
Résultats pour ereg_replace : pb de regexp
Résultats pour ereg_replace : pb de regexp
Résultats pour ereg_replace : pb de regexp
Résultats pour ereg_replace : pb de regexp