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-surpme'''''---- 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

Fou du volant
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 enlve les - au dbut 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

Fou du volant
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