PHP ile UTF-8 karakter kümesini kullanarak - mb fonksiyonlar gereklidir?

7 Cevap php

Bu son birkaç gün ben UTF-8 latin1 benim PHP kod tabanı dönüştürme yönünde çalışıyoruz. Ben iki ana çözüm ile tek bayt işlevleri yerine ya vardır okumak Çokbaytlı fonksiyonları inşa veya php.ini dosyasında mbstring.func_overload değerini ayarlayın. Ettik

Ama sonra thomasrutter tarafından yazılan komut ve dize hazır kodlanmış olarak Çokbaytlı fonksiyonları sürece, UTF-8 için aslında gerekli olmadığını belirtmek görünüyor yığın taşması, üzerine this iplik geldi UTF-8.

Ben bunun doğru olup olmadığını başka bir kanıt bulamadı ve ben mb_functions benim kodu dönüştürmek gerekmez çıkıyor eğer o gerçek bir zaman tasarrufu olacaktır! Bu biraz ışık tutmak mümkün herkes?

7 Cevap

Bildiğim kadarıyla sorunu anlamak, sürece tüm veriler utf-8% 100 gibi - onlara özel karakter varsa ve bu kullanıcı girişi, veritabanı anlamına gelir ve aynı zamanda PHP kodlama kendilerini dosyaları - bu { [(0)]} true for search and comparison operations. @ NTD belirttiği gibi baytlı karakterleri içeren bir dize üzerinde çalıştırdığınızda, olmayan bir multibyte strlen () yanlış sonuçlar üretecektir.

THis kodlama temelleri üzerinde büyük bir yazıdır.

Eğer functions they replace herhangi kullandığınız sürece onlar "gerekli" değildir (ve bu are bunlardan en az birini kullanarak olasıdır) ya da açıkça bir özellik gerekir gibi uzatma HTTP handling.

UTF-8 uyumlu doğru çalışırken, ben her zaman bir ek geri PHP UTF-8 Cheatsheet düşmek: PCRE'nin desenler u değiştirici kullanmak için güncelleştirilmesi gerekir.

thomasrutter search, özel işleme gerek olmadığını gösterir. Bir UTF8 dizesinin uzunluğunu kontrol etmek gerekirse Örneğin, ben bunu nasıl görmüyorum ovaya kullanarak strlen().

En kısa sürede inceleyerek veya baytlı bir dize değiştirme konum olarak, bir MB_ * işlevini kullanmanız gerekir. Neden gösteren çok hızlı bir örnek:

$str = "abcžđščćöçefg";
mb_internal_encoding("UTF-8");

echo "strlen: ".strlen($str)."\n";
echo "mb_strlen: ".mb_strlen($str)."\n";

Bu yazdırır:

strlen: 20
mb_strlen: 13

Böyle mb_strtoupper gibi işlevleri de gerekli olabilir. strtoupper A'ya dönüştürmek değildir.

Dizeleri (Ve hatta bu iso-8859-1 olduğunu tahmin) tek bayt olmasını bekliyoruz fonksiyonları vardır. Bu gibi durumlarda, size ne yaptığınızı farkında olmak ve muhtemelen yedek işlevleri kullanmak gerekir. http://www.phpwact.org/php/i18n/utf-8: at oldukça kapsamlı bir listesi vardır

Siz PHP Çokbaytlı fonksiyonları uzatır mbfunctions kütüphanesi kullanabilirsiniz:

http://code.google.com/p/mbfunctions/