Ne PHP geliştiricileri için daha iyidir - Unicode veya UTF-8?

5 Cevap php

Ne PHP geliştiricileri için daha iyidir - Unicode veya UTF-8?

Ben uluslararası bir CMS oluşturmak için gidiyorum. Yani tüm dünyada müşterileri için gidiyorum. Onlar tüm olası dilleri konuşur.

Ne kodlama biçimi tarayıcı tanıma ve DB veri depolama için daha iyi?

5 Cevap

"Unicode" bir kodlama değil. UTF-16 UTF-8 versus anlamına gelebilir (big-endian veya little-endian). Gerçekten tarayıcı desteği için çok önemli değil. Herhangi bir modern tarayıcı üçünü destekleyecektir. Muhtemelen bulacaksınız UTF-8 en uzay verimli veritabanı için.

UTF-8 Unicode bir kodlama, bir bayt (beton) dizisi olarak Unicode karakter (soyut) dizisini temsil eden bir yoludur. UTF-16 gibi diğer kodlamaları, (endian-büyük ve küçük-endian türevleri hem de olan) vardır. Ne olursa olsun hangi birini seçin bütün dilleri destekleyebilir böylece UTF-8 ve UTF-16, hem Unicode her karakteri temsil edebilir.

Sadece bir bayt ASCII karakterleri temsil beri metnin çoğu Batı dillerinde ise UTF-8 yararlıdır, ancak Çince gibi "yabancı" alfabe birçok karakter için üç bayt her gerekiyor. UTF-16, diğer taraftan, hiç (bazı çok ezoterik karakterler olsa da, Unicode en "Basic Multilingual Plane" dışında olanlar, dört gerektiren) karşılaşmak olasıdır tüm karakterler için tam iki bayt kullanır.

Gerçekten düzgün Unicode desteği vermez çünkü olsa da, uluslararası yazılım geliştirme için PHP kullanarak tavsiye etmem. It has bazı Unicode kodlamaları (multibyte string işlevlerine bakıyoruz), ancak bayt karakter değil gibi PHP çekirdek davranır dizeleri ile çalışan, yani standart PHP string fonksiyonları çalışmak için uygun değildir fonksiyonlarının eklenti Birden fazla byte olarak kodlanmış karakterler ile. Eğer karakterin UTF-8 gösterimini içeren bir dize üzerinde PHP'nin strlen() ararsanız bu karakter UTF-8 üç bayt alır çünkü Örneğin, "大", o olsa bile, 3. dönecektir tek bir karakter. Gibi dize bölme işlevlerini kullanarak substr() istikrarsız olduğu için bir multi-byte karakteri bozuk dize ortasında bölünmüş eğer.

Java, C #, ve Python gibi web geliştirme için kullanılan çoğu başka diller, yerleşik Unicode desteği, siz onları temsil etmek için kullanılır hangi kodlama konusunda endişelenmenize gerek bir dizeye rasgele Unicode karakter koymak ve böylece bellek çünkü sizin bakış bir dize karakterleri, değil bayt içerir. Bu Unicode metin ile çalışmak için çok daha güvenli, daha az hata eğilimli bir yoldur. Bu ve diğer sebeplerden dolayı (PHP gerçekten büyük bir dil değil), ben başka bir şey kullanmanızı tavsiye ediyorum.

(PHP 6 uygun Unicode desteği var olacağını okudum, ama bu henüz mevcut değil.)

UTF-8 is Unicode kodlama. Muhtemelen UTF-8 ve UTF-16 arasında seçim yapmak istiyorum anlamına geliyordu.

Microsoft recommends o

Developers should use UTF-8 for all Unicode data that they send to and receive from the browser.

Veritabanı depolama için, RDBMS için daha iyi destek var kodlamayı kullanın. Ya da, her şeyin eşit olması, uzay verimliliğine dayalı seçin. UTF-16 Asya dilleri için daha küçük olma eğilimindedir ise UTF-8, İngilizce için küçük ve çoğu Avrupa dilleri olduğunu.

Unicode soyut karakter bir demet (sözde kod noktaları) ve özellikleri (bir rakam olduğunu, bu büyük vs olduğu) tanımlayan bir standarttır. Ayrıca bazı kodlamalar (yöntemleri bayt karakterleri temsil etmek), UTF-8 onlardan biri olmak tanımlar. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) daha fazla bilgi için Spolsky tarafından bakın.

Ben kesinlikle UTF-8 ile gitmek istiyorum, standart her yerde bu gün, ve bu demektir ki, bir yerde tüm 7-bitlik ASCII karakterleri bırakarak gibi bazı güzel özelliklere sahip olduğu gibi [(0)] {gibi çoğu HTML-ilgili fonksiyonlar } UTF-8 temsiline doğrudan kullanılan, yani kodlama-ilgili güvenlik açıklarını bırakarak daha az şansı olabilir. Ayrıca, PHP bir çok fonksiyonu açıkça UTF-8 dizeleri bekliyoruz, ve UTF-8 de, UTF-16 gibi alternatifler daha iyi bir metin editörü desteği vardır.

Tüm dünyada dilin aksan başvurduğu, çünkü UTF-8 kullanmak daha iyidir. Ayrıca UTF-8 çok fazla kullanılmayan veya tanınan karakter eklemek için genişletilmiş hükümleri vardır. Ben tercih ve her zaman UTF-8 ve dizi kullanın.