SORU
10 Kasım 2008, PAZARTESİ


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
10 Kasım 2008, PAZARTESİ


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. MySQL utf8mb4_* harmanlama (Açık herhangi bir karakter kümesi olmadan) belirtilen örtülü olarak utf8mb4 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 sahiptir Content-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çin accept-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.

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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FUzzyBUnnyBOoties

    FUzzyBUnnyBO

    3 EKİM 2007
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011