Bonjour tout le monde,
Je faisais quelques tests avec iconv(), que voici :
1 2 3 4 | <?php setlocale(LC_CTYPE, 'fr_FR.UTF8'); var_dump(iconv('UTF-8', 'ASCII//TRANSLIT', '€ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿι')); var_dump(iconv('UTF-8', 'ASCII//IGNORE', '€ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿι')); |
Dont voici les résultats :
1 2 | string(56) "EURAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiii?ooooouuuuyy?" bool(false) |
Du coup, WTF. Pourquoi une erreur se produit dans le deuxième cas ? J'ai aussi testé l'encodage en ASCII
tout simple (sans //IGNORE
), pareil. J'ai testé en ISO-8859-1
, rebelote. J'ai testé en ISO-8859-1//IGNORE
, dix de der. Et ça ne marche pas non plus dans d'autres locales, que ce soit fr_FR
(sans UTF8), ou en_US
, UTF8 ou non.
Par contre, ça a marché en encodant vers UTF8//IGNORE
, donc ce n'est pas un problème de //IGNORE qui n'aurait pas été compilé pour une raison quelconque.
Je referai des tests sur mon Linux ce soir, mais est-ce qu'un tel problème vous est déjà arrivé ? J'aimerais bien utiliser //IGNORE, parce que je n'aime pas trop le remplacement € -> EUR.
Edit : je précise que mon fichier .php est bien encodé en UTF8, au cas où.