2012-02-29 4 views
8

jeśli masz zestaw znaków inny niż UTF-8 i musisz umieścić go w formacie JSON, aby przenieść go do bazy danych, istnieją dwie metody, które mogą być używane w PHP, wywołując utf8_encode() i iconv() . Chciałbym wiedzieć, który z nich ma lepszą wydajność i kiedy jest wygodny w użyciu jeden lub drugi.iconv() Vs. utf8_encode()

Odpowiedz

14

gdy masz inny zestaw znaków UTF-8

Nope - utf8_encode() nadaje tylko do konwersji ISO-8859-1 do UTF-8. Iconv zapewnia ogromną liczbę kodowań źródłowych i docelowych.

Re wydajność, nie mam pojęcia jak działa wewnętrznie i jakie biblioteki używa, ale moje przewidywania nie będą miały dużej różnicy - przynajmniej nie na "normalnych" ilościach danych w bajtach lub kilobajtach . W razie wątpliwości wykonaj test porównawczy.

I mają tendencję do używania iconv() bo to jasne, że nie jest to konwersja z zestawu znaków A do zestawu znaków B.

Również iconv() zapewnia bardziej szczegółową kontrolę nad tym, co zrobić, gdy napotka nieprawidłowe dane. Dodanie //IGNORE do zestawu znaków docelowych spowoduje, że po cichu upuści nieprawidłowe znaki. Może to być pomocne w pewnych sytuacjach.

+0

również można użyć // trasnlit do wygenerowania tego typu konwersji u \ 00F, że java dekodowania automatycznie do ISO-8859-1. ale nie jestem pewien, czy to samo będzie miało miejsce, jeśli istnieją różne zestawy znaków zakodowane do utf-8. –

+0

Zauważ, że PHP> = 5.4.0 zawiedzie teraz na nieprawidłowych znakach, nawet z flagą '// IGNORE': https://bugs.php.net/bug.php?id=61484 – dotancohen

0

Polecam Ci napisać własną funkcję. Będzie to 2-3 linie i będzie lepiej niż w przypadku problemów z ustawieniami narodowymi, ikonami itp.

Na przykład: Fix Turkish Charset Issue Html/PHP (iconv?)

+0

A co jeśli autor chce podejście, w którym nie zna wszystkich możliwych znaków wejściowych? –