preg_replace et surbrillance

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : preg_replace et surbrillance

Re: preg_replace et surbrillance

par itachi3712 » 15 févr. 2012, 13:38

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.

Re: preg_replace et surbrillance

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

Salut,

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

@+ tard

Re: preg_replace et surbrillance

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

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
	);	
}


preg_replace et surbrillance

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

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.