Suppression accents d'un fichier UTF8 [RESOLU]

Suppression accents d'un fichier UTF8 [RESOLU] - PHP - Programmation

Marsh Posté le 04-10-2017 à 15:37:00    

Bonjour,
 
  Bien que ce cas soit discuter dans de nombreux sujets, je souhaite enlever les accents d'un fichier utf8.
  Le fichier d'origine "cadastre.qlr" est encodé en UTF8 sans BOM, mon script php pour remplacer les caractères accentués est également en UTF8 sans BOM.
 
Mon script

Code :
  1. $tmp=file_get_contents("data/cadastre.qlr" );
  2. $tmp2=remplace_caract_speciaux($tmp);
  3. file_put_contents("data/cadastre2.qlr",$tmp2);
  4. function remplace_caract_speciaux(&$in) {
  5. $search = array ('@[éèêëÉÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i');
  6. $replace = array ('e','a','i','u','o','c');
  7. return preg_replace($search, $replace,$in);
  8. }


 
Le fichier cadastre2.qlr est également encodé en UTF8 sans BOM
 
Par contre le mot étiquettes devient eetiquettes
 
 
Merci par avance.


Message édité par snike le 06-06-2018 à 08:25:51
Reply

Marsh Posté le 04-10-2017 à 15:37:00   

Reply

Marsh Posté le 04-10-2017 à 16:07:50    

Il manque le modificateur u à tes motifs.
 

Code :
  1. $search = array ('@[éèêëÉÊË]@iu','@[àâäÂÄ]@iu','@[îïÎÏ]@iu','@[ûùüÛÜ]@iu','@[ôöÔÖ]@iu','@[ç]@iu');


 
Et i n'est pas utile si dans ta classe tu mets déjà le caractère avec les 2 casses.
 
Toutefois, pour faire ça proprement, je te recommande l'usage de l'extension intl (la classe Transliterator en particulier qui existe depuis PHP 5.4.0) :

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


Ou si tu l'utilises beaucoup dans un même script :

Code :
  1. function remplace_caract_speciaux($in) {
  2.    static $translit = NULL;
  3.  
  4.    if (is_null($translit)) {
  5.        $translit = transliterator_create('NFD; [:Nonspacing Mark:] Remove; NFC');
  6.    }
  7.  
  8.    return $translit->transliterate($in);
  9. }


 
Et pas besoin d'une référence sur ton paramètre, surtout si $in n'est pas modifié.


Message édité par pluj le 04-10-2017 à 16:13:10
Reply

Marsh Posté le 04-10-2017 à 16:25:10    

Bonjour,
 
  Ça marche mieux, un grand merci.

Reply

Sujets relatifs:

Leave a Replay

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