Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1411 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Suppression d'accents, de TOUS les accents

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Suppression d'accents, de TOUS les accents

n°2313043
Dawa
www.shootmeagain.com
Posté le 24-03-2018 à 07:45:26  profilanswer
 

Hello,  
 
Cela ressemble à une question déjà tombée 1000x. Elle va un peu plus loin toutefois.  
 
Pour échapper certains accents (et les transformer en ce même caractère non accentué), j'utilise depuis des années une fonction faite main :  
 

Code :
  1. function no_accent($str_accent) {
  2.    $pattern = Array("/æ/", "/É/", "/é/", "/è/", "/ê/", "/ë/", "/€/", "/ç/", "/Ç/", "/à/", "/á/", "/â/", "/ä/", "/ã/", "/Ä/", "/À/", "/å/", "/Â/", "/î/", "/ï/", "/í/", "/ì/", "/$/", "/µ/", "/ù/", "/ü/", "/û/", "/ú/", "/Ó/", "/ô/", "/ö/", "/õ/", "/ø/", "/Ø/", "/ò/","/ó/", "/ð/", "/ý/", "/ÿ/", "/ž/", "/’/" );
  3.  $rep_pat = Array("ae", "e", "e", "e", "e", "e", "e", "c", "C", "a", "a", "a", "a", "a", "a", "a", "a", "a", "i", "i", "i", "i", "", "u", "u", "u", "u", "u", "o", "o", "o", "o", "o", "o", "o", "o", "d", "y", "y", "z","" );
  4.    $str_noacc = preg_replace($pattern, $rep_pat, $str_accent);
  5.    return $str_noacc;
  6. }


 
 
Le problème c'est qu'on utilise parfois des termes d'autres alphabets et je dois à chaque fois adapter cette liste et corriger manuellement le problème.  
 
J'ai donc trouvé une fonction un peu plus complète :  
 

Code :
  1. function no_accentNEW($text) {
  2.         $utf8 = array(
  3.             '/[áàâãªäåæ]/u' => 'a',
  4.             '/[ÁÀÂÃÄÅÆ]/u' => 'A',
  5.             '/[éèêë]/u' => 'e',
  6.             '/[ÉÈÊË]/u' => 'E',
  7.             '/[ÍÌÎÏÍ]/u' => 'I',
  8.             '/[íìîï]/u' => 'i',
  9.             '/[óòôõºöðø]/u' => 'o',
  10.             '/[ÓÒÔÕÖØ]/u' => 'O',
  11.             '/[úùûü]/u' => 'u',
  12.             '/[ÚÙÛÜ]/u' => 'U',
  13.             '/[ýýÿ]/u' => 'y',
  14.             '/Š/u' => 'S',
  15.             '/š/u' => 's',
  16.             '/ç/' => 'c',
  17.             '/Ç/' => 'C',
  18.             '/Ð/' => 'Dj',
  19.             '/ñ/' => 'n',
  20.             '/Ñ/' => 'N',
  21.             '/Ý/' => 'Y',
  22.             '/Ž/' => 'Z',
  23.             '/ž/' => 'z',
  24.             '/þ/' => 'b',
  25.             '/Þ/' => 'B',
  26.             '/ƒ/' => 'f',
  27.             '/ß/' => 'ss',
  28.             '/Œ/' => 'Oe',
  29.             '/œ/' => 'oe',
  30.             '/–/' => '-', // conversion d'un tiret UTF-8 en un tiret simple
  31.             '/[‘’‚‹›]/u' => ' ', // guillemet simple
  32.             '/[“”«»„]/u' => ' ', // guillemet double
  33.             '/ /' => ' ', // espace insécable (équiv. à 0x160)
  34.         );
  35.         $text = preg_replace(array_keys($utf8), array_values($utf8), $text);
  36.         return $text;
  37.     }


 
Le seul souci est qu'on ne comprend pas non plus TOUS les accents et caractères spéciaux. Je prends l'exemple de bizarrerie comme Ġ Ř Ĉ etc. Il y en a des centaines comme ça, reprises ici : https://www.jchr.be/html/caracteres.htm  
 
Mon plan A serait évidemment de refaire une fonction manuellement qui reprendrait tous ces foutus caractères, mais je me demandais évidemment, par gain de temps, si l'un d'entre vous serait éventuellement déjà tombé sur une fonction similaire ?  
 
Merci et bonne journée !


Message édité par Dawa le 24-03-2018 à 07:50:07

---------------
SHOOT ME AGAIN WEBZINE
mood
Publicité
Posté le 24-03-2018 à 07:45:26  profilanswer
 

n°2313048
MaybeEijOr​Not
but someone at least
Posté le 24-03-2018 à 10:15:33  profilanswer
 

Salut,

 

Non, mais j'ai envie de poser la question de si tu ne prends pas le problème à l'envers ?
Quel est l'intérêt de remplacer ces caractères ? Et si tu n'en veux vraiment pas, pourquoi ne pas les interdire ?
Non parce que se retrouver avec un "poincon" au lieu d'un "poinçon" ou un "ou" au lieu d'un "où" ça n'a pas de sens.


Message édité par MaybeEijOrNot le 24-03-2018 à 13:58:41

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2313055
SICKofitAL​L
misanthrope
Posté le 24-03-2018 à 13:05:16  profilanswer
 

D'accord avec MaybeEijOrNot, toutefois si tu dois vraiment supprimer ces caractères, et ainsi te limiter à l'ASCII, tu peux utiliser les méthodes précisées dans ce post par exemple, via des regex donc : https://stackoverflow.com/questions [...] rom-string


---------------
We deserve everything that's coming...
n°2313058
pluj
Posté le 24-03-2018 à 17:04:26  profilanswer
 

Si c'est bien de l'UTF-8, il manque moitié des modificateurs u.
 
Et puis, dans ce cas, le top pour faire une translitération, c'est l'extension intl puisque le faire à la main à coup de str_replace ou preg_replace, c'est sûr que tu es loin de gérer Unicode, sans parler, en plus, des caractères décomposés (ex : le é peut aussi s'écrire e suivi de l'accent grave séparé) ...
 

Code :
  1. function no_accent(string $string): string {
  2.    return transliterator_create('NFD; [:Nonspacing Mark:] Remove; NFC')->transliterate($string);
  3. }


 
Voire :

Code :
  1. function no_accent(string $string): string {
  2.    return transliterator_create_from_rules("::Latin; ::Lower; ::Latin-ASCII; ([^a-z0-9])+ > \-" )->transliterate($string);
  3. }


Message édité par pluj le 24-03-2018 à 17:06:43

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Suppression d'accents, de TOUS les accents

 

Sujets relatifs
Gestionnaire de contenu moderne [PHP, SQL] Forum de discussion[PHP] stocker valeur d'un iframe dans unfichier
[Résolu PHP]aide pour passer de preg_replace à preg_replace_callbackrécupérer collection d'objets en PHP depuis une D.B.
Php.ini changement non pris en compteSuppression liste fichiers sur postes réseauw
Rendre invisible un lien avec PHPÉcrire dans un fichier qui est en cours de lecture
[HTML/CSS][PHP][JS][SQL] Quelques bon livres ?Conservation des accents des répertoires
Plus de sujets relatifs à : [PHP] Suppression d'accents, de TOUS les accents


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR