Suppression de "é" dans une chaine.


biscuit
WRInaute impliqué
WRInaute impliqué
 
Messages: 519
Inscription: 5 Juin 2006

Suppression de "é" dans une chaine.

Message le Sam Aoû 18, 2007 13:27

Salut toutes et tous,

J'ai un petit problème incomprehensible pour moi en supprimant les accents dans une chaine avec:
Code: Tout sélectionner
$ret = strtr($str, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ",
         "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");


Les lettres accentuées sont bien remplacée par la lettre sans accent à l'exception des "e" (soit èéêë) qui sont remplacés par une chaine vide "".

Quelqu'un a déjà eu ça ?


hebmaster
WRInaute passionné
WRInaute passionné
 
Messages: 1133
Inscription: 22 Déc 2005

Message le Sam Aoû 18, 2007 14:32

Voila une fonction qui permet de supprimer ts les caractères spéciaux(et remplace le vide par des tirets):

Code: Tout sélectionner
function convert_for_uri($text) {
  // Définition du séparateur
  define("SEPARATOR", "-");

  $tofind = "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ"; // Lettre accentuées
  $replac = "aaaaaaooooooeeeeciiiiuuuuyn"; // Equivalant non accentué

  // Mise en minuscule + suppression des lettres accentuées par leur équivalant non accentué
  $text = strtr(strtolower($text),$tofind,$replac);

  // Remplacement de caractère non alphanumérique par un séparateur
  $text = ereg_replace("[^a-z0-9]", SEPARATOR, $text);

  // Suppression des doubles séparateurs
  while (strstr($text, SEPARATOR . SEPARATOR))
    $text = str_replace(SEPARATOR . SEPARATOR, SEPARATOR, $text);

  // Retour avec suppression d’un possible séparateur en fin de chaîne
  return(ereg_replace(SEPARATOR . "$", "", $text));
}


biscuit
WRInaute impliqué
WRInaute impliqué
 
Messages: 519
Inscription: 5 Juin 2006

Message le Sam Aoû 18, 2007 14:40

Ouais merci mais c'est la même fonction que j'ai déjà (en un peu plus évoluée).

J'ai l'impression que c'est un problème d'encodage. Je suis en UTF8 et si fais
Code: Tout sélectionner
         print strtr("Méchant", "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");


Ca me retourne
Code: Tout sélectionner
My�chant


Dans mon document j'ai bien le charset UFT8 de définit, dans php.ini j'ai bien default_charset = "UTF-8" et dans httpd.conf UTF8 est bien définit. Tout le reste du site tourne en utf8 et il n'y a pas de problème... :cry:

Il y a autre chose à paramétrer ?


biscuit
WRInaute impliqué
WRInaute impliqué
 
Messages: 519
Inscription: 5 Juin 2006

Message le Sam Aoû 18, 2007 15:36

Bon j'ai contourné le prob par de la bricole de chez bricole... ça me plaît pas trop, mais ça fonctionne...

Code: Tout sélectionner
         $str = "Méchant";         
         $str = htmlentities($str,ENT_NOQUOTES,'UTF-8');
         $str = strtolower($str);
         $replace = array(
          "á" => "a", "â" => "a", "à" => "a", "ä" => "a",
          "é" => "e", "è" => "e", "ê" => "e", "ë" => "e",
          "î" => "i", "ï" => "i",
          "û" => "u", "ü" => "u", "ù" => "u",
          "ô" => "o", "ö" => "o",
          "ç" => "c"
         );
         foreach($replace as $key => $val) $str = str_replace($key, $val, $str);
         print $str;


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités