Suppression de "é" dans une chaine.

  • Auteur de la discussion Auteur de la discussion biscuit
  • Date de début Date de début
Salut toutes et tous,

J'ai un petit problème incomprehensible pour moi en supprimant les accents dans une chaine avec:
Code:
$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 ?
 
Voila une fonction qui permet de supprimer ts les caractères spéciaux(et remplace le vide par des tirets):

Code:
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));
}
 
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:
			print strtr("Méchant", "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");

Ca me retourne
Code:
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 ?
 
Bon j'ai contourné le prob par de la bricole de chez bricole... ça me plaît pas trop, mais ça fonctionne...

Code:
			$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;
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut