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
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.
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?)
E se l'autore vuole un approccio in cui non conosce tutti i possibili caratteri di input? –
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. –
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