remplacer les caractères accentués

Mammouth du PHP | 843 Messages

31 juil. 2007, 08:35

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 ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

31 juil. 2007, 11:16

strtr() :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
AB
ViPHP | 5818 Messages

31 juil. 2007, 14:56

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

Mammouth du PHP | 843 Messages

01 août 2007, 15:33

oki merci :)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

lux
Eléphant du PHP | 372 Messages

19 août 2007, 16:32

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:

ViPHP
AB
ViPHP | 5818 Messages

21 août 2007, 05:37

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

lux
Eléphant du PHP | 372 Messages

21 août 2007, 09:59

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

lux
Eléphant du PHP | 372 Messages

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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) );
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

lux
Eléphant du PHP | 372 Messages

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 :?

ViPHP
ViPHP | 5924 Messages

24 août 2007, 14:09

Tu peux essayer strtr avec des tableaux.

lux
Eléphant du PHP | 372 Messages

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

ViPHP
AB
ViPHP | 5818 Messages

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

lux
Eléphant du PHP | 372 Messages

24 août 2007, 23:25

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

Ou je me goure ? :oops:

ViPHP
ViPHP | 5924 Messages

24 août 2007, 23:57

Dans ce cas, on utilise une pcre.