remplacer les caractères accentués

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 : remplacer les caractères accentués

par AB » 03 sept. 2007, 03:38

Je me suis emmêlé les pinceaux car je n'étais pas connecté. Excusez pour mes deux derniers messages redondants en tant qu'invité.
----
EDIT de Zeus : J'ai supprimé les mauvais messages et j'ai réintégré le contenu dans à la suite :
Bon j'ai du me taper 2-3 tutos, pasque bon je m'étais pas encore assez bien documenté sur les regex.
Donc voila le code qui marche finalisé, ce qui me chipote encore c'est que j'ai du faire 2 regex, je sais pas si je peux n'en faire que une :
function MakeUrl($title)   
    {  
$a_remplacer = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','ñ',' ');
$remplacement = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y','n','-');  
$url = str_replace($a_remplacer,$remplacement,$rawurl);  
$url = strtolower($url);  
$url = preg_replace('/[^a-z0-9]/','-', $url);
$url = preg_replace('/[-]+/','-', $url);     
return($url);  
}
Pour la deuxième regex, tu n'as pas besoin de déclarer une classe de caractère puisque tu n'en cherches qu'un.

Code : Tout sélectionner

$url = preg_replace('/-+/','-', $url);

devrait donc suffire.

par lux » 26 août 2007, 11:29

Bon j'ai du me taper 2-3 tutos, pasque bon je m'étais pas encore assez bien documenté sur les regex.
Donc voila le code qui marche finalisé, ce qui me chipote encore c'est que j'ai du faire 2 regex, je sais pas si je peux n'en faire que une :
function MakeUrl($title)   
    {  
$a_remplacer = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','ñ',' ');
$remplacement = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y','n','-');  
$url = str_replace($a_remplacer,$remplacement,$rawurl);  
$url = strtolower($url);  
$url = preg_replace('/[^a-z0-9]/','-', $url);
$url = preg_replace('/[-]+/','-', $url);     
return($url);  
}

par AB » 26 août 2007, 05:47

Ben heuu bonne question :P
En fait j'aimerais enlever tous les caractères autres que a-z et 0-9 et les remplacer par - .
Bon deja je peux enlever le A-Z, il sert a rien car j'ai fait un strtolower avant.
Après ça je pense que tu seras pas loin d'avoir terminé d'optimiser ta fonction :wink:

par lux » 25 août 2007, 19:37

Ben heuu bonne question :P


En fait j'aimerais enlever tous les caractères autres que a-z et 0-9 et les remplacer par - .
Bon deja je peux enlever le A-Z, il sert a rien car j'ai fait un strtolower avant.

par Sékiltoyai » 25 août 2007, 02:11

Dans ton pattern de pcre, pourquoi [^a-zA-Z0-9] ?

par lux » 25 août 2007, 00:28

Bon en fait c'était pas dur je crois que j'ai trouvé :

function MakeUrl($title)  
    { 
$a_remplacer = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','ñ',' ');
$remplacement = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y','n','-'); 
$url = str_replace($a_remplacer,$remplacement,$rawurl); 
$url = strtolower($url); 
$url = preg_replace('/[^a-zA-Z0-9][-]+/','-', $url);    
return($url); 
}
J'ai donc changé la ligne en preg-replace, délimité par des / / et ajouté le [-]+ qui dit que quel que soit le nombre de - il le remplace par un seul -.

Ça à l'air de marcher, je me suis pas trop merdé j'espère ? 8-)

par lux » 25 août 2007, 00:14

Avec preg_replace je suppose ? :oops:

par Sékiltoyai » 24 août 2007, 23:57

Dans ce cas, on utilise une pcre.

par lux » 24 août 2007, 23:25

Heu si y a -------- par exemple, pour le remplacer par - ?

Ou je me goure ? :oops:

par AB » 24 août 2007, 23:15

Bon ben je me suis amusé a finaliser le truc, si ça intéresse qqn (P.S. si vous avez des idées pour améliorer, dites le moi). Notez que cette fonction ne sera pas utilisée tout le temps, donc pas besoin que ce soit une bombe dans les benchmarks. De toute façon la fonction de remplacement mets 0 secondes après 1000 éxécutions, donc bon ... :P

function MakeUrl($title) 
    {
$a_remplacer = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','ñ',' ');
$remplacement = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y','n','-');
$url = str_replace($a_remplacer,$remplacement,$rawurl);
$url = strtolower($url);
$url = ereg_replace("[^a-zA-Z0-9]", "-", $url); 
while (strstr($url, '--'))
   		{
			$url = str_replace('--', '-', $url);
		}
return($url);
}
pourquoi une boucle et pas simplement
function MakeUrl($title) 
    {
$a_remplacer = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','ñ',' ');
$remplacement = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y','n','-');
$url = str_replace($a_remplacer,$remplacement,$rawurl);
$url = strtolower($url);
$url = ereg_replace("[^a-zA-Z0-9]", "-", $url); 

$url = str_replace('--', '-', $url);
		
return($url);
}

par lux » 24 août 2007, 22:38

Bon ben je me suis amusé a finaliser le truc, si ça intéresse qqn (P.S. si vous avez des idées pour améliorer, dites le moi). Notez que cette fonction ne sera pas utilisée tout le temps, donc pas besoin que ce soit une bombe dans les benchmarks. De toute façon la fonction de remplacement mets 0 secondes après 1000 éxécutions, donc bon ... :P

function MakeUrl($title) 
    {
$a_remplacer = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','ñ',' ');
$remplacement = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y','n','-');
$url = str_replace($a_remplacer,$remplacement,$rawurl);
$url = strtolower($url);
$url = ereg_replace("[^a-zA-Z0-9]", "-", $url); 
while (strstr($url, '--'))
   		{
			$url = str_replace('--', '-', $url);
		}
return($url);
}

par Sékiltoyai » 24 août 2007, 14:09

Tu peux essayer strtr avec des tableaux.

par lux » 24 août 2007, 13:05

Okay me disais aussi qu'il y avait un truc comme ça. Bon ben je vais rapidement ficeler tout ça. Dommage que strtr ne marche pas avec UTF-8 :?

par zeus » 24 août 2007, 12:54

contrairement à strtr($string, $from, $to), qui remplace chaque caractère de la chaine $from par son équivalent dans la chaine $to, caractère par caractère, str_replace($string, $from, $to) remplace $from par $to, en entier

Dans ton second exemple, str_remplace() ne remplacera quelque chose uniquement s'il trouve "éà" dans la chaine, et non pas "é" ou "à".

Pour avoir un comportement équivalent, tu doit passer par un tableau
$a_remplacement = array('à' => 'a', 'è' => 'e');

echo str_replace( $string, array_keys($a_remplacement), array_values($a_remplacement) );

par lux » 24 août 2007, 12:44

Par contre, strtr() ne marche pas avec UTF-8 ...
Il faut donc utiliser str_replace mais j'ai un peu de mal...
$newurl = str_replace('é','e',$url);
Ça ça marche, par contre si je fais :
$newurl = str_replace('éà','ea',$url);
ça ne marche plus ...
Je crois que j'utilise str_replace pas correctement