Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 6768|Yanıt: 0

UTF-8 kodlama problemi BOM ayrıntılı olarak tanımlanmıştır

[Bağlantıyı kopyala]
Yayınlandı 30.10.2014 17:38:44 | | |
Wordpress'te dikkat edilmesi gereken UTF-8 BOM sorunları
Çok erken bir sorunla karşılaştım, yani belirli bir eklentiyi yükledikten sonra, etkinleştirmek için tıkladıktan sonra beyaz bir ekran beliriyordu. Nedenini hiç çözemedim ve önceki çözüm, Çince karakterleri içermiyorsa, dosyayı doğrudan ASCII koduna aktarmak, ki bu genellikle çözülebiliyor. Bugün kardeşim için bir blog aldığımda bu durum tekrar oldu. Uzun araştırma yaptıktan sonra sonunda cevabı buldum.

Unicode spesifikasyonunda BOM kavramı vardır. BOM - Bayt Sırası İşaresi, yani bayt sırası işareti. BOM hakkında bir notu buradan bulabilirsiniz:

UCS kodunda "ZERO WIDTH NO-BREAK SPACE" adlı bir karakter vardır ve bu karakter FEFF olarak kodlanır. FFFE, UCS'de var olmayan bir karakterdir, bu yüzden gerçek yayında görünmemelidir. UCS spesifikasyonu, bayt akışını iletmeden önce "ZERO WIDTH NO-BREAK SPACE" karakterini aktarmamızı önerir. Bu şekilde, alıcı bir FEFF alırsa, bayt akışının Big-Endian olduğunu gösterir; FFFE alınırsa, bayt akışının Little-Endian olduğunu gösterir. Bu nedenle, "ZERO WIDTH NO-BREAK SPACE" karakteri BOM olarak da adlandırılır.

UTF-8, bayt sırasını belirtmek için BOM gerektirmez, ancak nasıl kodlandığını belirtmek için BOM kullanabilirsiniz. "ZERO WIDTH NO-BREAK SPACE" karakterinin UTF-8 kodlaması EF BB BF'DIR. Yani alıcı EF BB BF ile başlayan bir bayt akışı alırsa, bunun UTF-8 kodlaması olduğunu bilir.

Windows, metin dosyalarının nasıl kodlandığını işaretlemek için BOM kullanır.

Ayrıca, unicode web sitesindeki SSS-BOM BOM'u ayrıntılı olarak açıklar. Resmi doğal otorite İngilizce olarak daha zahmetli görünüyor.

UTF-8 kodlanmış bir dosyada, BOM üç bayt kaplar. Notepad kullanarak bir metin dosyasını UTF-8 kodlama olarak kaydediyorsanız, dosyayı UE ile açın ve başta FFFE'yi görmek için onaltılık düzenleme durumuna geçin. Bu, UTF-8 kodlu dosyaları tanımlamak için iyi bir yoldur, yazılımlar dosyanın UTF-8 kodlu olup olmadığını anlamak için BOM kullanır ve birçok yazılım ayrıca içe aktarılan dosyanın BOM olmasını gerektirir. Ancak hâlâ BOM'u tanımamayan birçok yazılım var. Firefox hakkında araştırma yaparken, Firefox'un erken sürümlerinde eklentilerin BOM (Roman Koruma Kartı) (Roman Listesi Kartı Sistemi) olmayacağını biliyordum, ancak Firefox 1.5 ve sonraki sürümler BOM'u desteklemeye başladı. Şimdi öğrendim ki PHP de BOM'u desteklemiyor.

PHP, BOM dikkate alınmadan tasarlandı, yani UTF-8 kodlu dosyanın başındaki BOM'un üç karakterini görmezden gelmiyor. Çünkü içinde olması gerekir
Bo-Blog wiki'de gördüğüm gibi, PHP kullanan Bo-Blog da BOM ile sorun yaşıyor. Başka bir sorun da belirtiliyor: "COOKIE gönderme mekanizmasının sınırlaması nedeniyle, bu dosyaların başında zaten BOM bulunan dosyalarda COOKIE gönderilemez (çünkü PHP, COOKIE gönderilmeden önce dosya başlığını göndermiştir), bu yüzden giriş ve çıkış fonksiyonları geçersizdir. COOKIE ve SESSION'lara dayanan tüm fonksiyonlar geçersizdir. WordPress arka planındaki boş sayfanın sebebi bu olmalı, çünkü çalıştırılan dosyaların herhangi birinde bir BOM bulunur ve üç karakter de gönderilir, bu da çerezler ve oturumlara bağlı işlevselliğin başarısız olmasına neden olur.

Çözüm, dosya sadece İngilizce karakterler (veya ASCII kodlamadaki karakterler) içeriyorsa ASCII kodu olarak kaydetmektir. UE gibi bir düzenleyici kullanıyorsanız, File->Convert->UTF-8'i ASCII'ye tıklayın veya Save As'ta ASCII kodlamasını seçin. Eğer DOS formatında biten bir satır ise, Notepad ile açıp Save As seçeneğine tıklayabilir ve ASCII kodlamayı seçebilirsiniz. Eğer Çince karakterler içeriyorsa, UE'nin kaydetme fonksiyonunu kullanabilirsiniz ve "UTF-8 no BOM" seçeneğini seçebilirsiniz. Lütfen aşağıdaki resme bakınız:

Bo-Blog wiki'sinin talimatlarına göre: Editplus önce gb olarak ve sonra UTF-8 olarak kaydedilmeli. Ancak bunu yaparken dikkatli olun, GBK kodlamasında yer almayan tüm karakterler kaybolur. Dosyada Çince olmayan bazı karakterler varsa, bu yöntemi kullanmayın. (Bu küçük açıdan bakıldığında, UE - UltraEdite-32 gerçekten Editplus'tan çok daha iyi, Editplus ise çok hafif)

Bulduğum bir diğer yol ise WordPress tarafından sağlanan dosya düzenleyicisini kullanmak. Bu yöntem sınırlı değil ve özel bir editör indirmeye gerek yok, sonuçta herkes Wordpress kullanıyor. Öncelikle, ftp'de düzenlemek istediğiniz dosyanın yazma iznini açın, ardından WordPress arka planını - > yönetim > dosya düzenleyicisini girin, dosyayı düzenleme yoluna girin ve Dosyayı Düzenle tuşuna tıklayın. Görünen düzenleme ekranında ilk üç karakteri göremeyeceksiniz, ama sorun değil, imlecinizi tüm dosyanın ilk karakterinin önüne yerleştirin ve Backspace tuşuna basın. Tamam, Dosyayı Güncelle'e tıklayın, ftp'de yenileyin, dosyanın 3 bayt daha küçük olduğunu görebilirsiniz ve işiniz bitti.

Son olarak, bu büyük bir sorundur; kendi eklentilerini yazmak, başkalarının eklentilerini kendi kullanımları için düzenlemek isteyen ve şablonu değiştirmek isteyenler (herkesin buna ihtiyaç duyduğu tahmin ediliyor), yukarıdaki bilgileri anlamak en iyisidir, böylece bir sorun olduğunda bunalamazsınız.





Önceki:İlkokul öğrencilerinin LOL oynadığını izleyin ve her şeyi saniyeler içinde öldürün! (En Son Oyuncu Orijinali)
Önümüzdeki:Luo Yonghao, "2500'ün altında olan cep telefonları torunlardır" diye yanıt verdi.
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com