PHP UTF-8 kodlaması ile ilgili sorunlar

3 Cevap php

Rusça da değildi gibi ben URL'den alıyorum karakterler, örneğin www.mydomain.com/?name=john için, uzun ürünler olarak, gayet iyi.

Rusça da vardır olsaydı, ben'' başlamıştı.

Yani $ name = iconv ("cp1251", "utf-8", $ isim) eklendi; ve şimdi Rusça ve İngilizce karakterler için çalışıyor, ama vida kadar diğer dilleri. :)))

Örneğin 'Jānis' iconv önce iyi çalıştı (Letonya), şimdi 'jДЃnis' dönüşür.

Herhangi bir fikir Kiril dilleri ile çalışmak ve diğer dilleri berbat olmaz bazı evrensel kodlayıcı varsa?

3 Cevap

Aslında bu aşağı URL kodlanmış nasıl sorununa çalışır. Üzerinde standart bir yolu yoktur gibi belirli bir sayfadaki bir bağlantıyı tıklayarak ediyorsanız tarayıcı isteği gönderdiği sayfanın kodlamasını kullanır ama sizin tarayıcınızın adres çubuğuna doğrudan URL girerseniz davranış şekilde undefined (Firefox sağlayan bir about:config UTF-8 kodlanmış URL'leri kullanmaya geçiş) kullanmak için kodlama.

Bazı kodlama algılama kullanmanın yanı sıra verilen isteği URL ile kullanılan kodlama bilmek için hiçbir yolu yoktur.

EDIT:

Sadece yedekleme için yukarıda ne dedi, ben (benim durumumda çalışan Mac OS X - IE durumunda Parallels ile Windows Vista) beş büyük tarayıcıların varsayılan davranışını gösteren küçük bir test script yazdı:

$p = $_GET['p'];
for ($i = 0; $i < strlen($p); $i++) {
    // this displays the binary data received via the URL in hex format
    echo dechex(ord($p[$i])) . ' ';
}

http://path/to/script.php?p=äöü yol açar çağırıyor

  • Safari (4.0.5): c3 a4 c3 b6 c3 bc
  • Firefox (3.6.3): c3 a4 c3 b6 c3 bc
  • Google Chrome (5.0.375.38): c3 a4 c3 b6 c3 bc
  • Opera (10.10): e4 f6 fc
  • Internet Explorer (8.0.6001.18904): e4 f6 fc

Yani belli ki ilk üç kullanım UTF-8 kodlanmış URL'leri Opera ve IE ISO-8859-1 veya türevleri bazı kullanırken. Conclusion: Bir URL yoluyla gönderilen metinsel veri kodlama ne emin olamaz.

Neden sadece tüm dosya ve süreçleri ile UTF-8 kullanmak değil mi?

Sorun dosya kodlama gibi görünüyor, her zaman .php dosyalar, örneğin Intype gibi kod editörleri için tercih edilen kodlama olarak UTF-8 no BOM kullanmalısınız kolayca bu (UTF-8 Plain) belirtmenizi sağlar.

alt text

Also, add the following code to your files before any output:

header('Content-Type: text/html; charset=utf-8');

You should also read The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) Joel Spolsky tarafından.