iconv() ne fonctionne pas autrement qu'avec //TRANSLIT

Le problème exposé dans ce sujet a été résolu.

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ù.

+0 -0

Hello,

J'avais effectivement les erreurs, mais pas les notices. Je ne m'attendais pas à ce qu'un fail ne me fasse qu'une notice. -_- D'après ce commentaire de la doc, la fonction plante parce que php ne passe pas le flag -c à la lib iconv, bref //IGNORE ne marche plus pour l'instant, et ce depuis 6 ans.

J'ai effectivement fini par tomber sur ton article au cours de la journée, et c'est effectivement beaucoup plus simple pour faire un slug, merci !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte