[Résolu] Lettres accentuées et substitution

Lettres accentuées et substitution [Résolu] - PHP - Programmation

Marsh Posté le 25-05-2008 à 15:34:50    

Bonjour,
 
J'essaye de substituer des lettres accentuées par des lettres non accentuées.
 
J'utilise donc cette fonction.
 

Code :
  1. function sans_accents($str_accent) {
  2.    $pattern = Array("/é/", "/è/", "/ê/", "/ç/", "/à/", "/â/", "/î/", "/ï/", "/ù/", "/ô/" );
  3.    $rep_pat = Array("e", "e", "e", "c", "a", "a", "i", "i", "u", "o" );
  4.    $str_noacc = preg_replace($pattern, $rep_pat, $str_accent);
  5.    return $str_noacc;
  6. }


 
 
 

Code :
  1. $user = str_replace( "'", "", strtolower(substr($data[1],0,3).".".$data[0]));

 --> me renvoie la chaine de caractères à traiter soit ahé.aberwag
 

Code :
  1. $userssaccents = sans_accents('ahé.aberwag');

 ---> me renvoie bien ahe.aberwag
 
Par contre

Code :
  1. $userssaccents = sans_accents($user);

me renvoie ahé.aberwag
 
Où est mon erreur ?
 
Merci bien


Message édité par sneakz le 27-05-2008 à 16:13:35
Reply

Marsh Posté le 25-05-2008 à 15:34:50   

Reply

Marsh Posté le 25-05-2008 à 17:53:11    

Je vois pas trop d'ou sort ton $username puisque dans ton exemple c'est $user mais si $user ou $usermane est traité avant par un htmlentities() par exemple, tes accents sont alors au format d'entités html, c'est donc normal que ta fonction ne marche plus.
 
Tu peut essayer d'ajouter html_entity_decode() simplement comme ça si ta version de PHP est superieur à la 4.3.0 :

Code :
  1. $userssaccents = sans_accents(html_entity_decode($username));

Reply

Marsh Posté le 25-05-2008 à 19:01:35    

Merci masterpsx, je vais tester.
 
C'est bien $userssaccents = sans_accents($user); et non $userssaccents = sans_accents($username); qu'il faut lire. Je vais corriger.

Reply

Marsh Posté le 25-05-2008 à 19:12:54    

Je n'ai pas de changement.
 

Code :
  1. while (($data = fgetcsv($handle, 1000, ";" )) !== FALSE)
  2.   {
  3.    $num = count ($data);
  4.        $user = str_replace( "'", "", strtolower(substr($data[1],0,3).".".$data[0]));
  5.        $user = str_replace(' ', '', $user); // suppression des espaces
  6.        $userssaccents = sans_accents(html_entity_decode($user));
  7.        echo $userssaccents;
  8.        echo sans_accents('ahé.elghalbzouri');
  9.        break;


 
ahé.elghalbzouri (premier echo)  ahe.elghalbzouri (deuxième echo)

Reply

Marsh Posté le 27-05-2008 à 16:12:23    

J'ai contourné  le problème en indiquant les lettres accentuées avec leur valeur héxadécimale dans l’encodage ISO-8859-1.
 

Code :
  1. function sans_accents($str_accent) {
  2.    $pattern = Array("/[\xe8-\xeb]/", "/[\xe0\-\xe5]/", "/[\xec-\xef]/", "/[\xf9-\xfc]/", "/[\xf2-\xf6]/",);
  3.    $rep_pat = Array("e", "a", "i", "u", "o" );
  4.    $str_noacc = preg_replace($pattern, $rep_pat, $str_accent);
  5.    return $str_noacc;
  6. }


Message édité par sneakz le 27-05-2008 à 16:13:10
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed