[php] probleme suppression d'accent utf-8

Résolu/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 27/10/2011 à 16:51
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 - 27 oct. 2011 à 16:49
Bonjour,

Ca fait quelques heures que je passe a essayer de trouver une solution !
du coup je me décide enfin à laisser un message en esperant que vous pourrez m'aider !

j'essaye de supprimer les accents d'une chaine de carateres.
en fait, j'ai fait de l'url rewriting sur un site.
et je balance dans l'adresse des articles le titre de cet article ex :
/article-180-l-ete-sera-tres-chaud.html

aujourd'hui mon probleme est que j'obtiens :
/article-180-l--t--sera-tr-s-chaud.html

j'ai essayé avec strtr, avec preg_replace, avec mb_ereg_replace....
bref, ca marche pas. j'ai fait plein de forums qui donnent des solutions qui apparemment marchent pour les autres mais pas pour moi. :(

en fait je stock en BDD les titres sous forme "l'& eacute;t& eacute; sera tr& egrave;s chaud".
donc je me dis, qu'en faisant un html_entity_decode ca va transformer les & eacute; en é. ca c bon.
mais après, rien n'y fait, il me vire quand meme les accents et met un "-" au lieu de me les remplacer par un caractere sans accent.

voici mes fonctions :
function NoAccentTag($string){    
        $string=html_entity_decode($string);    
 return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿ','aaaaaceeeeiiiinooooouuuuyy');    
}    

function RewriteName($text)    
{    
   $text=strtolower($text);    
   $text = NoAccentTag($text);    
   $separator = "-";    
   $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));    
}


merci d'avance pour votre aide ! je n'en peux plus !

A voir également:

1 réponse

diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
27 oct. 2011 à 16:49
bon, du coup je me reponds a moi meme et a ceux a qui ca pourra servir !

voilà mes nouvelles fonctions :
function NoAccentTag($str)
{
    $str = htmlentities($str);
    
    $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. 'œ'
    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
    
    return $str;
}

function RewriteName($text)
{
   $text=strtolower($text);
   $text=html_entity_decode($text);
   $text = NoAccentTag($text);
   $separator = "-";
   $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));
}
0