Surlignement mot recherché

WRInaute discret
Bonjour

Je fais une recherche dans un fichier texte contenant des citations
Je fais la recherche sur mot(s) entiers(s) avec toutes possibilités de casse et d'accents (certains internautes les oublient ou se trompent !)
La recherche fonctionne parfaitement

Le problème vient du surlignement du(des) mot(mots) recherché(s) dans les résultats
Le(s) mot(s) recherché(s) sans accents : pas de pb, ils sont bien surlignés
Les mots avec caractères accentués non initiaux ou terminaux : pas de pb, ils sont bien surlignés
Les mots avec caractères accentués initiaux ou terminaux ne sont pas surlignés

Testez le si vous le désirez sur http://www.exemples-php.com/utilitaires-en-ligne/citations/citations.php

Le code ($mot : mot recherché, stockage des résultats dans un tableau)
Code:
$mot = trim($_GET['mot']);
if (strlen($mot) < 3) ... avertissement et retour au formulaire ...
else
	{
		$mot2 = strtr($mot,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
		$resultats = array();
		foreach($fichier as $ligne)
			{
				$ligne2 = strip_tags($ligne);
				$ligne2 = strtr($ligne2,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
				if (preg_match("/\b".$mot2."\b/i", $ligne2))
					{
						$mot3 = '<span class="surlignevert">'.$mot.'</span>';
						$ligne3 = preg_replace("/\b".$mot."\b/i", $mot3, $ligne);
						array_push($resultats, $ligne3);
					}
			}
		... puis traitement, affichage des résultats ...

Comment pourrais-je régler ce problème ?
Merci de porter attention à ce problème et bonne journée.
 
WRInaute discret
Bonjour, j'attaque tôt ce matin (2h !!!)

Rien trouvé d'intéressant sur php.net preg_replace
J'ai écumé le web, problème souvent évoqué, jamais réglé tel que je le souhaite, ai essayé moultes codes qui, soit n'ont pas fonctionné, soit pas complètement
L'important est que ma recherche soit OK
Maintenant seuls les mots recherchés avec accents initiaux ou finaux ne sont pas surlignés, ce qui n'est qu'une minorité des requêtes
Le pb se situe effectivement au niveau de la ligne
Code:
$ligne3 = preg_replace("/\b".$mot."\b/i", $mot3, $ligne);
Je précise que je travaille sur un simple fichier texte dont chaque ligne (incluant parfois des balises <br />) est composée de la citation et, éventuellement, de son auteur (en italiques) soit : [la partie entre crochets n'est pas toujours renseignée]

Aimer, c'est n'avoir plus droit au soleil de tout le monde.<br />On a le sien.[<br /><em>(Marcel Jouhandeau)</em>]

J'attend la solution miracle ...

Bonne journée
 
WRInaute impliqué
je pense que dans ton cas un bon str_replace peut faire l'affaire, reste à définir ce que peut être un séparateur de mot et de te tapper les combinaisons possibles
 
Discussions similaires
Haut