Page 1 sur 2

remplacer les caractères accentués

Posté : 31 juil. 2007, 08:35
par BeRoots
Salut à tous :)

je souhaite convertir tout les caractères accentués d'une chaine en leur caractere "nominal" (genre é en e ; î en i ; ...) :-k

j'ai deja une idée en faisant comme suit mais avec un autre jeu de caracteres que ISO-8859-15 qui ne contiendrait pas les caracteres accentuer:
$chaine = 'é ù à î ï ô õ ...';
$chaine_sans_accent = html_entity_decode($style_post,ENT_QUOTES,'ISO-8859-15');
1°) quelqu'un connait il un jeu de caractere qui ne contient pas d'accent et proche du ISO-8859-15 ?
2°) sinon existe il un fonction php pour virer les accents?

merci d'avance ;)

Posté : 31 juil. 2007, 11:16
par Truc
strtr() :-k

Posté : 31 juil. 2007, 14:56
par AB
$nom_fichier = strtr($nom_fichier_orig, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');

Posté : 01 août 2007, 15:33
par BeRoots
oki merci :)

Posté : 19 août 2007, 16:32
par lux
Je relance la discussion par ici. Je veux faire de l'URL rewriting, donc je suis en train de coder une fonction qui va créer une URL bien belle et propre :
function MakeUrl($title)
	{
		$url = str_replace(" ","-",$title);
		$url = strtr($url, 
   		'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
   		'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
		return $url;
	}
Mais si par exemple un utilisateur entre ñ ? Et je suis sur qu'il y en a encore que j'oublis. Donc c'est pas 100% fiable je trouve. De plus j'ai utlisé str_replace juste avant, laquelle des deux (str_replace ou strtr) est plus rapide ? Merci d'avance :wink:

Posté : 21 août 2007, 05:37
par AB
Je relance la discussion par ici. Je veux faire de l'URL rewriting, donc je suis en train de coder une fonction qui va créer une URL bien belle et propre :
function MakeUrl($title)
	{
		$url = str_replace(" ","-",$title);
		$url = strtr($url, 
   		'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
   		'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
		return $url;
	}
Mais si par exemple un utilisateur entre ñ ? Et je suis sur qu'il y en a encore que j'oublis. Donc c'est pas 100% fiable je trouve. De plus j'ai utlisé str_replace juste avant, laquelle des deux (str_replace ou strtr) est plus rapide ? Merci d'avance :wink:
la différence ne doit pas être grande. En tous cas utilise l'un ou l'autre mais pas les deux
$url = strtr($url, 
   		'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿñ ', 
   		'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyyn-');

Posté : 21 août 2007, 09:59
par lux
C'est vrai que de n'en utiliser qu'une sera plus propre. Je vais encore ajouter une regex pour enlever les droles de caractères *%&/.:; etc... 8-)

Posté : 24 août 2007, 12:44
par lux
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

Posté : 24 août 2007, 12:54
par zeus
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) );

Posté : 24 août 2007, 13:05
par lux
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 :?

Posté : 24 août 2007, 14:09
par Sékiltoyai
Tu peux essayer strtr avec des tableaux.

Posté : 24 août 2007, 22:38
par lux
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);
}

Posté : 24 août 2007, 23:15
par AB
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);
}

Posté : 24 août 2007, 23:25
par lux
Heu si y a -------- par exemple, pour le remplacer par - ?

Ou je me goure ? :oops:

Posté : 24 août 2007, 23:57
par Sékiltoyai
Dans ce cas, on utilise une pcre.