Si vous lisez ceci, vous ne voulez probablement pas supprimer que les accents, mais également les diacritiques d’une chaîne. (Par exemple la cédille de « ç » est un diacritique.)
Dans ce cas, vous êtes au bon endroit :
echo
\Transliterator ;
// Hehe, ca marche !
Le code ci-dessus utilise la classe
Transliterator
de l’extension intl, interface entre
ICU
et PHP.
Contrairement à ce que son nom indique, cette classe ne se limite pas à la translittération : elle est capable
d’appliquer une série de transformations à du texte. NFD
,
[:Nonspacing Mark:] Remove
et NFC
sont les identifiants de trois transformations, combinés
en un identifiant composé.
NFD
Cette transformation va normaliser le texte sous sa forme « D » (NFD est l’acronyme de Normalization Form D) en effectuant une décomposition canonique. Pour comprendre ce concept il faut savoir qu’Unicode offre la possibilité d’encoder certains caractères de manières différentes. Par exemple « ç » peut s’écrire comme un caractère, ou comme la combinaison d’un « c » et d’une cédille combinante. Cette dernière est la forme décomposée du caractère, c’est donc celle qui sera produite par la NFD.
[:Nonspacing Mark:] Remove
Ici la transformation « Remove » ne s’appliquera qu’aux caractères faisant partie de la catégorie Unicode « Nonspacing Mark ». Hors, tous les caractères combinants en font partie : puisqu’ils se lient au caractère qui les précède, ils n’occupent pas leur propre espace !
La transformation précédente servait à séparer les caractères de leurs diacritiques, et celle-ci va les supprimer. On se retrouve avec notre texte sans diacritique.
NFC
NFD
a précédemment décomposé tous nos caractères ; il peut être pertinent de recomposer ceux qui
restent (le sujet est débattable mais NFC semble privilégié). Par exemple les syllabes de l’alphabet
hangeul ont leur propre caractère mais peuvent également être
encodées par une combinaison de
jamos.
NFC
réduirait une telle combinaison au caractère de la syllabe correspondante.
Si vous voulez approfondir les aspects d’Unicode abordés ici, je vous conseille évidemment leur documentation :
Le sujet est vaste ; bon courage !