UTF-8 tüm yol boyunca
Yeni bir server kurmak, ve tamamen benim web uygulamasında UTF-8 desteği istiyorum. Mevcut sunucularda geçmişte denedim ve hep-8859-1, ISO geri düşmek zorunda sonunda gibi görünüyor.
Tam olarak nereye kodlama/karakter grupları ayarlamak gerekiyor mu? Apache yapılandırmak gerekiyor farkındayım, MySQL ve PHP bunu takip edebilirim bazı standart kontrol listesi ya da uyumsuzluğunu ortaya belki giderilir?
Bu yeni bir Linux sunucu için MySQL 5, PHP 5 ve Apache 2 çalışıyor.
CEVAP
Veri Depolama:
Veritabanınızdaki tüm tablo ve metin sütunları
utf8mb4
karakter kümesini belirtin. Bu MySQL fiziksel ve değerleri UTF-8 kodlanmış ve doğal olarak saklamanızı sağlar. MySQLutf8mb4_*
harmanlama (Açık herhangi bir karakter kümesi olmadan) belirtilen örtülü olarakutf8mb4
kodlama kullanır unutmayın.MySQL eski sürümleri (< 5.5.3), ne yazık ki sadece kullanmak zorunda kalacaksın, yalnızca Unicode karakter kümesini destekler
utf8
,. Şaka olmasını isterdim.
Veri EriÅŸim:
Kullandığınız ne olursa olsun uygulama kodunu (örn, PHP),
utf8mb4
bağlantı karakter seti gerekir. Bu şekilde MySQL veri kapalı uygulama ve tersi verdiğinde doğal dönüştürme UTF-8 yapar.Bazı sürücüler sağlamak kendi mekanizması için yapılandırma bağlantı karakter seti, hem kendi iç durum güncellemeleri bildirir ve MySQL kodlama için kullanılır bağlantı-bu genellikle tercih edilen bir yaklaşım. PHP:
Eğer PHP &ge PDO soyutlama katmanı; 5.3.6 kullanıyorsanız DSN
charset
belirtebilirsiniz:$dbh = new PDO('mysql:charset=utf8mb4');
Eğer mysqli kullanıyorsanız
set_charset()
arayın:$mysqli->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($link, 'utf8mb4'); // procedural style
EÄŸer düz mysql ile sıkışmış ama çalışan PHP ≥ 5.2.3, ne olursan
mysql_set_charset
diyebilirsin.
Eğer sürücü sağlamaz kendi mekanizması ayarı bağlantı karakter kümesi varsa sorun sorguya söyle MySQL nasıl uygulama beklediği veri bağlantısı için kodlanmış:
SET NAMES 'utf8mb4'
.Aynı doğrultuda 13*/
utf8
*yukarıdaki ile ilgili olarak geçerlidir.
Çıktı:
Eğer uygulamanızın Diğer sistemler için metin aktarıyorsa da karakter kodlamasını haberdar olması gerekir. Web uygulamaları, tarayıcı ile veri gönderdi (HTTP yanıt başlıkları veya HTML metadata ile) kodlama konusunda bilgilendirilmelidir.
PHP,
default_charset
php kullanabilirsiniz.ını seçeneği, ya da el ile daha çok iş olduğunu ama aynı etkiye sahiptirContent-Type
MIME üstbilgi kendinize sorun.
GiriÅŸ:
Ne yazık ki, mağaza veya herhangi bir yerde kullanmak için denemeden önce geçerli bir UTF-8 olarak alınan her dizesi doğrulamak gerekir.
mb_check_encoding()
. PHP hile yapar, ama dini kullanmak zorunda. Bu çok yolu var zararlı müşteriler ne olursa olsun kodlama istiyorlar veri gönderebilir ve sizin için bu güvenilir yapmak için PHP almak için bir numara bulamadım.Akım okuma HTML spec, aşağıdaki benim alt-mermi gerekli ya da modern HTML artık geçerli bile değil. Benim anladığım tarayıcılar ile çalışmak ve karakter belgede belirtilen veri sunacak. Eğer HTML (XHTML, HTML4, vb.), eski sürümleri hedeflediğiniz ancak, bu noktalar hala yararlı olabilir:
- HTML için önce HTML5 sadece: tüm veriler tarayıcı tarafından size gönderilen UTF-8 içinde olmak istiyorum. Ne yazık ki, eğer güvenilir bir şekilde yapmanın tek yolu giderseniz bu
<form>
Tüm etiketler içinaccept-charset
öznitelik ekleyin:<form ... accept-charset="UTF-8">
. - HTML için önce HTML5 sadecenot : bu W3C HTML spec söyleyen müşteriler, "olmalı" varsayılan gönderme formları geri sunucuda her karakter sunucu, servis, ama görünüşe göre bu sadece bir öneri, bu nedenle ihtiyacı olduğu için açık her
<form>
etiket.
- HTML için önce HTML5 sadece: tüm veriler tarayıcı tarafından size gönderilen UTF-8 içinde olmak istiyorum. Ne yazık ki, eğer güvenilir bir şekilde yapmanın tek yolu giderseniz bu
DiÄŸer Kod Hususlar:
Belli ki yeterince hizmet (PHP, HTML, JavaScript, VB.) olacaksın dosyaları geçerli olarak kodlanmış UTF-8.
UTF-8 dizesi işlemek için her zaman, güvenli olduğundan emin olmak gerekir. Bu, ne yazık ki, zor kısmıdır. Muhtemelen PHP yaygın kullanımı 35 ** uzantısı yapmak isteyeceksiniz.
PHP yerleşik string işlemlerideğilvarsayılan olarak UTF-8 güvenli.Güvenle normal PHP string işlemleri ile yapabileceğiniz bazı şeyler vardır (birleştirme gibi), ama bir çok şey için
mbstring
fonksiyon eşdeğer kullanmalısınız.Ne yaptığını bilmek (okuma: berbat) değil, gerçekten UTF-8 ve mümkün olan en düşük seviyede nasıl çalıştığını bilmek gerekir. Bazı iyi kaynaklar için utf8.com bağlantılardan birini bilmeniz gereken her şeyi öğrenmek için bir göz atın.
UTF-8 tüm yol boyunca...
Nasıl'in Komut İstemi Windows 5 s...
JSON ilişkisel dizi için bir anahtar l...
Nasıl yönlendirme değişiklikleri devle...
Java tersten bir liste boyunca yinelem...