Page 1 sur 1

preg_replace et surbrillance

Posté : 03 févr. 2012, 09:50
par ikigami371
Bonjour,

je rencontre un problème pour mettre en surbrillance des mots issus d'une recherche utilisateur. Voici la recherche :

médecin généraliste

le moteur retourne toutes les fiches qui ont pour mots : médecin ou medecin ou MEDECIN ou généraliste ou generaliste ou GENERALISTE.

Mon problème c'est la surbrillance des mots recherchés, elle ne s'applique que sur "généraliste". médecin avec ou sans accents majuscules et generaliste / GENERALISTE ne sont pas mis en surbrillance. Voici le code :

Code : Tout sélectionner

for ($j=0;$j<$nb_mots_surbrillance;$j++){ if ($tab_surbrillance[$j] != "") { $chaine_titre = preg_replace("#\b".$tab_surbrillance[$j]."\b#i","<span class=\"surbrillance\">".$tab_surbrillance[$j]."</span>", $titre); $chaine_resume = preg_replace("#\b".$tab_surbrillance[$j]."\b#i","<span class=\"surbrillance\">".$tab_surbrillance[$j]."</span>", $resume_affiche); } }
Comment faire pour que tout les mots (majuscules, minuscules accents, sans accents) soient mis en surbrillance ? J'ai essayé avec str_ireplace, mais le problème de cette fonction c'est qu'il met en surbrillance un partie du mot contenu dans un autre (ex : recherche "conseille" il va mettre en surbrillance le "conseille" de "téléconseiller") et les utilisateurs ne souhaitent pas ça.

Je suis preneur de toutes vos idées. Je continue à chercher de mon côté.
Merci pour votre aide.

@+ tard.

Re: preg_replace et surbrillance

Posté : 03 févr. 2012, 13:26
par jojolapine
Bonjour,

Pourquoi ne pas essayer de préparer tous les mots possibles au préalable, puis de construire la regex en fonction ? :
<?php

$chaine  = 'Je suis médecin généraliste et medecin generaliste !';
$mots_recherches = array('médecin', 'généraliste');
$mots_surbrillance = array();

foreach( $mots_recherches as $mot){

    $mots_surbrillance[] = preg_quote($mot);
    $mots_surbrillance[] = preg_quote(removeAccents($mot));
}

$chaine = preg_match('#\b('.implode('|',$mots_surbrillance).')\b#i',' <span class="surbrillance">$1</span> ',$chaine);


function removeAccents($chaine){

	return str_replace(
	  array('à','á','â','ã','ä','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','À','Á','Â','Ã','Ä','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý'),
	  array('a','a','a','a','a','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','u','u','u','u','y','y','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','U','U','U','U','Y'),
	  $chaine
	);	
}



Re: preg_replace et surbrillance

Posté : 06 févr. 2012, 14:16
par ikigami371
Salut,

merci pour ce retour. Je vais tenter et je te tiens au courant.

@+ tard

Re: preg_replace et surbrillance

Posté : 15 févr. 2012, 13:38
par itachi3712
Bonjour à tous,

j'avance sur mon problème de surbrillance. Les mots "médecin", "medecin", "MEDECIN" avec ou sans s sont surlignés à condition que la recherche soit "médecin".
Comment faire si l'utilisateur cherche "medecin" pour mettre en surbrillance ces même mots ?

Merci pour votre retour.
@+ tard.