Rechercher sans s'occuper des accents

Soyez le premier à donner votre avis sur cette source.

Vue 5 792 fois - Téléchargée 350 fois

Description

Cette fonction vous permet de rechercher dans une chaine de caractere un mot comme dédé ou dede ou déde sens prendre en compte les accens et la case et metre devant et derriere le mot se que vous voulez (pour metre en gras par exemple: str_implante(la chaine,le mot,<b>,</b>))

ex:je cherche dede dans une chaine de caractères "Salut Dédé. Comment vas tu Dédé" la fonction vous renvera "Salut <b>Dédé</b>. Comment vas tu <b>Dédé</b>" si la fonction et configurée de manière a metre <b> au debut et </b> à la fin.

Je n'est maleureusement pas commenter la fonction car je n'es pas le temp pour le moment dsl

Attention: il y a une autre fonction qui doit rester pour que cette fonction marche c'est la fonction removeaccents qui permet d'enlever les accens.

Source / Exemple :


//fonction pour enlever les accens
function removeaccents($text)
	{  
    return strtr($text,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
   	}
//Je crée une fonction qui met $impstart au debut de $cherche et $impend a la fin dans la chène $string meme si il y en n'as plusieur
function str_implante($string,$cherche,$impstart,$impend)
{
	$cherche_txt_filtre=removeaccents(strtolower($cherche));
	$string_txt_filtre=removeaccents(strtolower($string));
	$impstart_long=strlen($impstart);
	$impend_long=strlen($impend);
	$cherche_long=strlen($cherche_txt_filtre);
	if(ereg("$cherche_txt_filtre","$string_txt_filtre"))
		{
		while($endwhile!=1)
			{
			$debut_mot=strpos($string_txt_filtre,$cherche_txt_filtre);
			$fin_mot=$cherche_long;
			$string_suite=substr("$string",$debut_mot);
			$string_fin=$cherche_long+$debut_mot;
			$string_fin_txt=substr("$string",$string_fin);
			$string_filtre_fin_txt=substr("$string_txt_filtre",$string_fin);
			//remplace les caractères trouver par une forme spécial (gras)
			$text_trouver_debut = substr_replace("$string","$impstart",$debut_mot);
			$text_trouver_fin = substr_replace("$string_suite","$impend",$fin_mot);
			$array_txt=array($txt,$text_trouver_debut,$text_trouver_fin);
			$txt=implode("",$array_txt);
			$string=$string_fin_txt;
			$string_txt_filtre=$string_filtre_fin_txt;
			if(!ereg("$cherche_txt_filtre","$string_txt_filtre"))
				{
				$endwhile=1;
				}
			}
			$array_txt2=array($txt,$string_fin_txt);
			$txt=implode("",$array_txt2);
			return $txt;
		}
}

Conclusion :


Elle est très utile pour les recherches surtout quand vous demander à mysql de faire une recherche avec "table LIKE '%dédé%'". mysql vous ressortira tous les enregistrements qui contienne dede ou dédé ;-).

A+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

JoJo738
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1 -
Bonsoir,
Tu peux optimiser. Les "$var" sont inutiles, $var est bon !
ereg($cherche_txt_filtre, $string_txt_filtre)
substr($string, $debut_mot);
...
Et priviligie les ' aux "
$txt=implode('', $array_txt2);
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

il y a deux erreurs dans ton script :
- $endwhile n'est pas defini au premier passage de la boucle (il faut donc l'initialiser avant).
- $txt n'existe pas non plus alors que tu l'utilises dans ton while(), il n'existe qu 'apres ce while(). Il faut aussi l'initialiser au debut de ta fonction.

Sinon ca marche bien, mais ca merite d'etre optimise je pense :-)
En fait, a mon sens, toute ta fonction de recherche 7 remplacement peut etre largement raccourcie avec un str_replace tout bete.
cs_micmonay
Messages postés
6
Date d'inscription
vendredi 17 décembre 2004
Statut
Membre
Dernière intervention
25 mai 2007
-
Alors je ne savais pas quand php il falait déclarer les variables vu que sa marche très bien sens. Pour la fonction str_replace elle prend les accens et la case.
si je remplace avec str_replace Dede en recherchant dede s'est dede qui sera en gras et si je recherche Dédé il me trouvera rien.
En bref ma fonction sert à ne pas toucher au text d'origine mais a y ajouter ou il faut les arguments $impstart et $impend.

Ps: Si j'ai mal comprit vaux remarque dite le moi ;-)
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29 -
sens définit ce que veulent dire les mots par exemple...

rechercher sans s'occuper des accents...

je trouves ton script marrant, mais à mon avis, on peut faire vraiment plus simple en passant par des exp_reg...
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Bah non, pas en reflechissant un peu...crois moi.
Et non...enfin si, ca marche, mais si tu n'as pas d'erreur c'est sans doute que tu as l'error_reporting qui n'est pas bien configure. MOi j'ai tout plein d'erreurs avec ton script. Enfin 2, lol, les 2 que je t'ai indiquees.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.