Probleme enlever les accents, les lettres ne sont pas remplacées

Fermé
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 - Modifié par diice le 30/05/2014 à 23:34
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 - 1 juin 2014 à 17:58
Bonjour,


je me bats avec une fonction de reecriture de chaine sans accent et remplacement d'espace par des _ ou -.

je comprends pas ce qui ne marche pas dans cette fonction :
function NoAccentTag($str)
{
    $str = htmlentities($str);
    
 $str = strtr($str,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
    $str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'oe'
    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
    
    return $str;
}

function RewriteName($text)
{
   $text=strtolower($text);
//    $text=htmlspecialchars($text);
   $text=html_entity_decode($text);
   $text = NoAccentTag($text);
   $separator = "_";
//   $text = mb_ereg_replace(" ", $separator, $text);
   $text = mb_ereg_replace("[^a-z0-9.]", $separator, $text);
   $text = str_replace("...","",$text);
   while (strstr($text, $separator . $separator))
      $text = str_replace($separator . $separator, $separator, $text);
   if (substr($text, 0, 1) == $separator)
      $text = substr($text, 1);
   return(mb_ereg_replace($separator . "$", "", $text));
}


par exemple :
echo RewriteName('française');
// ca donne=> fran_aise



c bon pour les majuscules, les espaces et autre caracteres de ponctuation, mais les accents a chaque fois il me met un _ a la place de la lettre sans accent !!!

est-ce que quelqu'un peut m'oreinter ? j'en ai essayé plein, et chaque fois j'ai le meme probleme !!!

merci d'avance,


A voir également:

3 réponses

TheLastShadow Messages postés 64 Date d'inscription lundi 22 novembre 2010 Statut Membre Dernière intervention 2 juin 2014 8
Modifié par TheLastShadow le 1/06/2014 à 16:32
Salut,

J'avais trouvé un autre script en trainant sur le web. Je m'en sert pour un site et il fonctionne très bien :

function stripAccents($str, $charset='utf-8')
{
    $str = htmlentities($str, ENT_NOQUOTES, $charset);
    
    $str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'oe'
    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
    
    return $str;
}
0
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
1 juin 2014 à 17:29
merci lastshadow,

mais du coup c'est pire, il m'enleve carement les caracteres !!

c'est ca qui fout le dawa :
$str = htmlentities($str, ENT_NOQUOTES, $charset);


il n'y a que ca de différent, et en faisant les test, c ca qui fait que je n'ai plus aucun caractere de la chaine...
0
TheLastShadow Messages postés 64 Date d'inscription lundi 22 novembre 2010 Statut Membre Dernière intervention 2 juin 2014 8
1 juin 2014 à 17:45
Ca me parait étrange... Je viens de retester chez moi, la fonction fonctionne très bien.
0
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
Modifié par diice le 1/06/2014 à 18:02
ah non, autant pour moi....
en fait je me sers de cette fonction et apres une autre qui enleve les caracteres de ponctuation pour creer un nom de page url du genre :
"article-6-j-espere-que-ca-boom"

et juste avec la fonction que tu m'as donné, quand c du texte en dur ca marche
ex :
echo stripAccents('bébé ça pête !'); // me donne bebe ca pete

mais j'ai des caractere bizarres dans mes liens....
ex :
echo '<a href="'.stripAccents('Vénus').'">'; // me donne : VAtilde;copy;nus 


et si je mets tout ca dans ma deuxieme fonction qui ajoute des tirets, j'ai plus rien !
ex :
echo '<a href="'.RewriteName('Vénus').'">'; // me donne : rien
0