2012-02-29 18 views
8

quando hai un set di caratteri diverso da UTF-8 e devi metterlo in formato JSON per migrarlo in un DB, ci sono due metodi che possono essere usati in PHP, chiamando utf8_encode() e iconv() . Mi piacerebbe sapere quale ha prestazioni migliori e quando è conveniente usare l'una o l'altra.iconv() vs. utf8_encode()

risposta

14

quando si dispone di un set di caratteri diverso di UTF-8

Nope - utf8_encode() è adatto solo per convertire una stringa di ISO-8859-1 a UTF-8. Iconv fornisce un vasto numero di codifiche sorgente e target.

Per prestazioni, non ho idea di come utf8_encode() funzioni internamente e quali librerie utilizzi, ma la mia previsione è che non ci sarà molta differenza - almeno non su quantità "normali" di dati in byte o kilobyte . In caso di dubbio, fare un punto di riferimento.

tendo a usare iconv() perché è chiaro che v'è una conversione da serie di caratteri A a carattere impostare B.

Inoltre, iconv() fornisce un controllo più dettagliato su cosa fare quando si lavora con dati non validi. L'aggiunta di //IGNORE al set di caratteri di destinazione causerà il silenziamento di caratteri non validi. Questo può essere utile in determinate situazioni.

+0

Inoltre è possibile utilizzare // trasnlit per generare questo tipo di conversione u \ 00F, che Java decodifica automaticamente a ISO-8859-1. ma non sono sicuro che lo stesso accadrà se ci sono diversi set di caratteri che sono stati codificati in utf-8. –

+0

Nota che PHP> = 5.4.0 ora fallirà con caratteri non validi, anche con il flag '// IGNORE': https://bugs.php.net/bug.php?id=61484 – dotancohen

0

Vi consiglio di scrivere la vostra funzione. Sarà lungo 2-3 linee e sarà meglio che alle prese con problemi locali, iconv, ecc.

Ad esempio: Fix Turkish Charset Issue Html/PHP (iconv?)

+0

E se l'autore vuole un approccio in cui non conosce tutti i possibili caratteri di input? –

Problemi correlati