i ölçüde kültürel bir zorluk değil, teknik bir olduğuna inanıyorum.
teknik sorunlar --- ve 'bir karakter bir byte' eşittir varsayımlar üzerine inşa edilmiş bir ekosistem unicode uygulamak için onun düpedüz tüm önemsiz değil gibi --- geliştiriciler Java veya Python çabalarının çok (son kopyalanan olabilirdi çevresinde 2001 yılından beri iyi ve büyük ölçüde çalışma unicode uyumlu), ama yapmadım.
i the discussion thread attached to the official, current documentation for php's utf8_encode()
fonksiyonu a> okurken, ben vertigo bir duygu olsun.
firstoff, bu işlev utf8_encode()
denir; Ancak, belgeler beklediği dize (aka latin-1) ISO-8859-1 olması bekleniyor belirtiyor. o sooo 80s var, sooo php bulunuyor.
En Commenters bir yük olarak unicode algılıyor gibi görünüyor. Orada karışık kodlamaları ile s'strings ile nasıl başa 'bilinmeyen içeriği' dizeleri dönüştürmek için kaç önerileri, '(wtf?), ya da ötesinde çünkü normalde kırılmasına neden codepoints ile ilgili bu işlevi dört-bayt başına codepoint sınırı.
tartışma karalamalar kurtulmak veya bu işlevin davranışı sorunlu bölümlerini önlemek için fixups etrafında merkezli. ve bu, benim için, sooo php: herkes sadece düzeltmeleri yapıyor, birkaç şey bir temelde doğru bir şekilde uygulanmaktadır. Bu benim tarafımda iftira olduğuna inanırsanız, burada bazı çerez vardır:
Bu belge zaten UTF-8 ise [aou] Alman Umlaute kırmak gibi görünüyor olsa da.
(UTF-8 anlamak için başarısızlık iki kez uygulandığında çalışmak üzere tasarlanmış değildir)
UTF8 içine 8859 ve korkunç 1252 dönüştürmek için bir yol sunar iconv () fonksiyonu, bak
(Iyi noktası: php geliştiriciler bölümünde önceki teknikte ihmaline yerine, adamcağız kendi uygulama)
utf8_encode ihtiyaç olup olmadığını tespit etmek preg_match kullanımı [...] suretler hariç [...] overlongs hariç
(utf8_encode()
kırmak istemem sadece bu şeyleri bırakarak, sessizce dizeleri tüm sorunlu içeriği silmek için düşündüren;) Bu metinler okunamaz hale (veya tamamen yok olabilir, ama hey, artık hata iletileri)
bir dize kodlamak için sadece değil henüz UTF-8 [...] mb_detect_encoding($s, "UTF-8")
if
(Belirttiği gibi by another commenter, bu işe gitmiyor:
$str = 'áéóú'; // ISO-8859-1
mb_detect_encoding($str, 'UTF-8'); // 'UTF-8'
mb_detect_encoding($str, 'UTF-8', true); // false
işte biz başka bir yerini bir hata bakıyoruz. mutlu avcılık. Ayrıca, ne burada önermek gibi görünüyor (yavaş, belirsiz)) edebilmiş gelir ve mekanik (hızlı, bazı) gelir ile çözülmesi gerektiğini Sezgisel yöntem kullanarak bir sorunu çözmek için
utf8_ [kodlamak | decode] belgelerine dediği gibi aslında nereden / ISO-8859-1 değil sadece, aynı zamanda windows-1252 karakter tercüme edecek
(Hiç açık ya da etraflı olması resmi php belgelere dayanmaz --- her zaman kimse hiç geri dokümanlar doyurmaya kullanıcıların yıllık tecrübesi ile okumalıdır)
Ben bir is_utf8 işlevi üzerinde çalışan ve diğerlerine ek i de dikkate aldı, burada yayınlamak istedim oldum 5000 karakter bug
(Unicode düzgün uygulanmadı çünkü büyük ölçüde, yalnızca var olan bir sorun için bir düzeltme. Biz de değil, sadece utf8_encode()
function codepoint başına 4 byte ötesinde vazgeçmek olacağını öğrenmek çıkan (ya da varsa, o da kıracak çıktı?) metin) 5000 karakter sınırı aşıyor
ben bu gibi ve gidebiliriz. hepsi için, özellikle, genel olarak sağlam bir altyapı oluşturmak için gereken ne, ya da hakkında ne kodlamaları ve karakter setleri kavramak için her yerde hazır gibi bu konuya bakarsak, php topluluk sadece ses değil: Zaten fikir olsun uygun bir şekilde unicode uygulamak. Bunun yerine, onların iskeleleri, kendi kartonu, onların çivi ve çekiç kullanarak ve başka bir çivi ile geri alınamaz her sorunlara kendi kanal bant atma, php denilen bu büyük tasavvurunu inşa devam ediyoruz. Tabii, bu bina böyle ara sıra yasal ama beklenmedik bir karakter olarak, esen rüzgardan geliyor her yaşayacaktır.
Bu özel iplik sekiz yıl boyunca aktif olarak görmeye tam durum şimdi sekiz yıl daha iyi olacak güven aşılamak değildir.