Enlever les accents d'une chaine
Hors ligneGlougloute Le 01/12/2007 à 20:35 Profil de Glougloute Configuration de Glougloute

I love VIC
Bonjour à tous !

Je suis confronté à un nouveau problème.
J'aimerais enlevé les accents et ponctuation d'une chaine et les remplacer par un tiret.
Voici ce que j'ai écrit en php.


<?php

function titreurl($texte){

$accent='ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ\'?!,;_ ';
$noaccent='AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn-------';
$texte strtr($texte,$accent,$noaccent);
return 
$texte;

}

$tg titreurl("a-surpême'''''---- et tout");

?>


Ca me donne ça : a-surpeme----------et-tout
J'aimerais faire en sorte qu'il ne puisse y avoir qu'un seul tiret entre les lettres : a-surpreme-et-tout
Avez vous une idée ?

Merci d'avance.
--
Je vous aiderai dans la mesure du possible ;)
Hors ligneAnthony Le 02/12/2007 à 00:42 Profil de Anthony Configuration de Anthony

Admin
Salut Glougloute

Utilise une expression régulière :

$texte = preg_replace('`(-){2,}`', '-', $texte);

essaie ça ça devrait marcher ;)
--

Hors ligneGlougloute Le 02/12/2007 à 12:28 Profil de Glougloute Configuration de Glougloute

I love VIC
Merci, mon script est opé maintenant :)
--
Je vous aiderai dans la mesure du possible ;)
Hors ligneMarculinos Le 02/12/2007 à 12:47 Profil de Marculinos Configuration de Marculinos

Viconaute Modérateur
Il est opé...

Mais est-il rationnel?
Hors ligneGlougloute Le 02/12/2007 à 14:49 Profil de Glougloute Configuration de Glougloute

I love VIC
J'ai parlé un peu trop vite.
En fait, si je mets uniquement la fonction dans une page, ça fonctionne correctement.

J'ai essayé de l'ajouté dans une page contenant des requetes etc...
Au lieu d'écrire : Défilé de mode
Il m'affiche : D-yfil-y-de-mode

Je ne vois pas d'ou vient le probleme.
Voici ma fonction :


function sans_accent($texte){

$accent = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîï¡ŠšÑñÙÚÛÜùúûüµ¥ÿýžº¹²³¼½¾@æÆßЀƒ£$¢þøŒð÷‰%×+*&?¨!.,;:_ˆ`^‹›(){}[]~’‘”“«»#®©™"§…·¶\"ˆ´˜°±¬ª¨¤¯=—–•¿????|¦‡†„¸/\' ';
$noaccent = 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiiSsNnUUUUuuuuuYyyz---------------------------------------------------------------------------------------------';
$texte = strtr($texte,$accent,$noaccent);
$texte = preg_replace('`( ){1,}`', '-', $texte); // on remplace les espaces par des tirets 
$texte = preg_replace('`(-){2,}`', '-', $texte); // si >1 tiret, on les efface

return strtolower(trim($texte, '-'); // on met tout en minuscule et on enlève les - au début ou à la fin

}
--
Je vous aiderai dans la mesure du possible ;)
Hors ligneAnthony Le 02/12/2007 à 18:55 Profil de Anthony Configuration de Anthony

Admin
Pour le strtr tu peux utiliser ça :


<?php
$chaine          
strtr($chaine'àáâãäåòóôõöøèéêëçìíîïùúûüÿñ''aaaaaaooooooeeeeciiiiuuuuyn');

$rechercher     = array('<','>','&','?',';','"','\'','\\','/','^','$','*','(',')','[',']','+','°','~','=','-','|','`','#','²','%','!','.','@','{','}',':',')','(','\'',' ');
$remplacer     = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','-','-');


$chaine str_replace($rechercher$remplacer$chaine);
?>


Sinon pour le "$texte = preg_replace('`( ){1,}`', '-', $texte); // on remplace les espaces par des tirets "

autant rajouter l'option dans le strtr ;)
--

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels