remplacer les caractères accentués

lux
Eléphant du PHP | 372 Messages

25 août 2007, 00:14

Avec preg_replace je suppose ? :oops:

lux
Eléphant du PHP | 372 Messages

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

ViPHP
ViPHP | 5924 Messages

25 août 2007, 02:11

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

lux
Eléphant du PHP | 372 Messages

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.

ViPHP
AB
ViPHP | 5818 Messages

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:

lux
Eléphant du PHP | 372 Messages

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

ViPHP
AB
ViPHP | 5818 Messages

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.