UTF-8 tüm yol boyunca | Netgez.com
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

  • geraldnonadoez

    geraldnonado

    3 Temmuz 2013
  • LivestrongWoman

    LivestrongWo

    1 Aralık 2011
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011