Iso-8859-1 Değiştir Web Karakter kodlaması UTF-8

2 Cevap php

Yaklaşık 2 yıl önce iso-8859-1 kullanarak büyük bir web sitesi kurma hata yaptı. Ben şimdi ajax kullanarak sunucuya veri gönderirken özellikle bazı karakterler ile ilgili sorunlar yaşıyorum. Bu nedenle, ben UTF-8 kullanarak geçmek istiyorum.

Ne sorunlar bu gelen görüyorsunuz? Ben değiştirilebilir gereken karakterleri aramak için site arama olurdu biliyor musun? gerçek karakter. Ama, bunu yaparken başka riskler vardır? Herkes önce bu yapılır mı?

2 Cevap

Ana zorluk, tüm veri yolları UTF-8 temiz olduklarını kontrol ettik emin yapıyor:

  1. Siteniz DB destekli mı? Eğer öyleyse, bu yüzden sıralama ve metin arama çalışmaları doğru, UTF-8 veya başka bir Unicode kodlama, tüm tabloları dönüştürmek gerekir.

  2. Dinamik içerik için bazı programlama dilini kullanarak bir site mi? (PHP, mod_perl, ASP ...?) Eğer öyleyse, bunun doğal UTF-8 kullanarak değilse, kullandığınız belirli dili tercümanı tam Unicode çeşit anladığından emin olun dönüşümleri çalışmak gerekir - UTF-16 sonraki en yaygın - ve web sunucusuna kendi çıkışında UTF-8 kullanmak için yapılandırılmış olduğunu kontrol.

  3. Sitenizin arka-uç uygulama sunucusuna bir tür var mı? Onun metin çıktıları için UTF-8 kullanıyor mu?

  4. Eğer bir web belge için charset beyan edebilir, en az üç farklı yerler vardır. Tüm bunları değiştirmek emin olun:

    • HTTP Content-Type başlık
    • Belgelerinizdeki <meta http-equiv="Content-Type"> etiketi '<head>
    • Belgenin üstündeki <?xml> etiketi, eğer XHTML Katı kullanılarak

Ben orta derecede karmaşık N-katmanlı uygulaması aracılığıyla bazı Unicode verileri takip ve benzeri dönüşüm zincirleri bulunan bütün bu bir yıl önce benim deneyimlerinden geliyor:

Latin-1 → UTF-8 → Latin-1 → UTF-8

Yani, veri "UTF-8" olduğunu iddia tarayıcıda sona erdi bile, uygulama hala sadece Latin-1 ile ortak alt kümesini ele verebilir.

O garip dönüşüm zincirleri için en büyük nedeni zamanında takım Unicode desteği olgunlaşmamışlardır nedeniyle oldu, ama boru hattı UTF-8 temiz yapmak için dikkatli değilseniz yine de kendinizi böyle çirkinlik ile karıştırmasını bulabilirsiniz.

Latin-1 karakterleri arama ve dosyaları tek tek dönüştürme hakkında yorum gelince, ben bunu yapmazdım. Ben açıkça UTF-8 Latince-1 dönüştürmeden, sistem her metin dosyasına beslenme, her modern Linux sisteminde bulunan iconv programı etrafında bir komut dosyası oluşturmak istiyorum. Hiçbir taş çevrilmemiş bırakın.

Böyle bir değişiklik sistem (neredeyse) her parçası dokunur. Sen veritabanından web tarayıcısına HTML, PHP, her şeyi ile gitmek gerekir.

Bir test sitesi başlatın ve bazı ciddi testleri (çeşitli şeyler yapıyor, çeşitli platformlarda çeşitli tarayıcılar) maruz.

IMO aslında UTF-8 ve ne yazılımı anlamına aşina almak önemlidir. Birkaç hızlı noktaları:

  • PHP, çoğunlukla byte odaklı. Karakterler ve kod noktaları ve bayt arasındaki farkı, ve UTF-8 ve Unicode arasında öğrenin.
  • UTF-8 iyi tasarlanmış. Örneğin, iki UTF-8 dizeleri verilen bir byte odaklı strstr() düzgün çalışmaya devam edecektir.
  • En yaygın sorun, ISO-8859-1 ve tersi gibi bir UTF-8 dizesi tedavi - Eğer hataları bu tür daha az olasılıkla yapmak için, bekledikleri kodlayan ne tür belirten sizin işlevlerine belgelerine eklemek gerekebilir. Dizeleri için bir değişken adlandırma kuralı (ne kullandıkları kodlama belirtmek için) de yardımcı olabilir.