2011-11-22 17 views
47

PHP'de iconv() ve mb_convert_encoding() arasındaki fark nedir? Biri daha iyi, daha hızlı, vb (örneğin, özel kodlamalar ile) yapar mı? Biri diğerine göre hangi durumlarda tercih edilir? PHP'nin en yüklemeleri ile birliktePHP'de iconv() ve mb_convert_encoding() arasındaki fark nedir?

iconv()

  1. :

    İşte ben zaten biliyorum düşünüyorum.

  2. Yeni karakter kümesine eşlenemeyen karakterler bulunduğunda, "benzer" karaktere dönüştürülüp dönüştürülmediklerini belirtebilirsiniz.

  1. genellikle php Mbstring eklentisini yükleme gerektirir() mb_convert_encoding.
  2. HTML-ENTITIES kodlarını, web hex kodlarına dönüştürür.

Başka farklılıklar var mı?

+0

İlgili: http://stackoverflow.com/questions/4050754/iconv-or-mbstring –

+0

Bu işlevlerden herhangi biri size ne zaman ve ne zaman bir sorun sunacağınız söylenemez çünkü hangi paylaşıma girmediniz? beton * çalıştırdığınız problemler. Her türlü işlevde olduğu gibi, sadece belirli bir iş yapar. Yani, iş için yanlış işlevi kullanırsanız, her zaman problemlerle karşılaşırsınız. – hakre

+8

Bu bir konu ve yararlı bir sorudur. OP, kendi özel durumunu sormadı ve daha sonra kendi durumundaki tercih edilen işlevi belirlemek için ayrıntı sağlamayı başaramadı; daha ziyade, aynı işlevi yerine getiren iki PHP işlevi arasındaki fark hakkında bilgi istedi.Tabii ki, soruyu şu şekilde dile getiriyor: Neden ikisi de var ve hangi durumlarda diğeri üzerinde tercih edilecek? Bu kapsamda spesifiktir ve uygulanabilirlikte geniş (PHP'de karakter dönüşümü yapan herkes bunu bilmek ister). Soru "yapıcı değil" şeklinde kapatılmamalıdır. – Josh

cevap

25

iconv(), PHP'nin çalıştığı sistem C kütüphanesinde bulunan iconv() işlevinin etrafındaki sarıcıdır (PHP, GNU ikonav ile oluşturulmadıkça, GNU simgev kullanıldığında). Dolayısıyla, iconv()'un performansı ve özellikleri, PHP'yi çalıştırdığınız yere ve nasıl oluşturulduğuna bağlıdır. Diğer taraftan, mb_convert_encoding()'un uygulanması, PHP (modül) kaynağına dahil edilmiştir. Gerçek dönüşümü idare eden libmbfl adlı bir kütüphane içerir. Böylece, PHP'yi çalıştırdığınız yerden bağımsız olarak çalışır. Burada desteklenen kodlamaların bir listesi var: http://php.net/manual/en/mbstring.encodings.php

Özetle, farklı platformları desteklemek istiyorsanız mb_convert_encoding()'un daha güvenilir olduğunu söyleyebiliriz. Ancak, Linux'ta (örneğin) iconv() kullanırsanız, çok daha fazla kodlamayı destekler (bkz. iconv --list).

İşlevlerin göreceli performansı, açık bir şekilde, belirli iconv() uygulamasına da bağlıdır.

+2

[iconv] (http://php.net/manual/en/function.iconv.php) dönüştürülemeyen karakterlerle ilgilenmek için // TRANSLIT ve // ​​IGNORE seçeneklerine sahiptir. [Iconv] (http://php.net/manual/en/function.iconv.php) "// IGNORE" ile ilgili yorumunuz için kodunuz E_NOTICE hatalarını atmanızı sağlayacaktır. [mb_convert_encoding] (http://php.net/manual/en/function.mb-convert-encoding.php) sadece ini_set ('mbstring.substitute_character', 'none'); ile geçersiz karakterleri kaldırabilir; mbstring.substitute_character] (http://php.net/manual/ru/mbstring.configuration.php)) –

+0

@Sanya_Zol Doğru, ancak glibc'nin iconv() uygulamasını kullanıyorsunuzdur. Teoride, [POSIX hangi kod kümelerinin mevcut olduğunu tanımlamıyor] gibi diğer platformlarda farklı şekilde çalışabilir (http://pubs.opengroup.org/onlinepubs/9699919799/functions/iconv_open.html). – pelle

+1

'iconv -l' link yardımcı olabilir – Pacerier

3

PHP 5.4'ten beri bir hata var. Sometime iconv, 'benzer' karakterli bir dize döndürmek yerine boş dizge döndürür.

Yani mb_convert_encoding kullanmalısınız.

+1

Bu hata penceresine – Tebe

İlgili konular