2011-02-09 13 views
6

HTML'de bir dize çıktığında, anlaşılır nedenlerden ötürü HTML karakterleri ("& <>" vb.) Gibi özel karakterlerden kaçınılmalıdır.HTML varlıklarına sahip bir dizeden kaçarken, UTF-8 kullanırsam Unicode 127'nin üzerindeki kodlama kodlarını güvenli bir şekilde atlayabilir miyim?

bu iki Java uygulamaları inceledik: org.apache.commons.lang.StringEscapeUtils.escapeHtml (String) net.htmlparser.jericho.CharacterReference.encode (CharSequence)

Hem tüm karakterleri kaçış İngilizce dışındaki tüm karakterler etkili olan Unicode kod noktası 127 (0x7F).

Bu davranış iyi, ancak ürettiği dizeler, karakterler ingilizce olmadığında (örneğin, İbranice veya Arapça) insanca okunabilir değildir. Unicode 127'nin yukarısındaki karakterlerin bu şekilde kaçmadığı durumlarda, tarayıcılarda hala doğru bir şekilde oluşturduklarını gördüm. Bunun nedeni, html sayfasının UTF-8 kodlu olması ve dolayısıyla bu karakterlerin tarayıcıya göre anlaşılabilir olmasıdır.

Soruma Yanıt: Web sayfamın UTF-8 kodlanmış olması koşuluyla, HTML varlıklarından kaçarken kod noktası 127'nin üstündeki Unicode karakterlerinden kaçmayı güvenli bir şekilde devre dışı bırakabilir miyim?

cevap

5

Sadece iki koşulda HTML öğelerini kullanmak gerekir: HTML özel bir anlamı vardır bir karakteri kaçmak için

  • (örn <)
  • Kodlama belgesine ait olmayan bir karakteri görüntülemek için (örn. ISO-8859-1 belgesindeki sembolü)

UTF-8'in tüm Unicode karakterlerini temsil edebileceği göz önüne alındığında, yalnızca ilk durum geçerlidir.

El ile HTML yazarken, şimdi bir HTML öğesi eklemek için pratik bulabilirsiniz ve editörünüz ve/veya klavyeniz belirli karakterleri yazmanıza izin vermezse (yalnızca nasıl olduğunu anlamaya çalışmaktan çok daha kolay bir şekilde &copy; yazmayı gerçek © yazın) ama metin kaçan otomatik sadece sayfa boyutu ;-)

Java ancak diğer diller hakkında çok az özel karakter ve mümkün olan tüm varlıkları kodlamak için farklı işlevlere sahiptir biliyorum büyümek yapmak.

4

sizin gönderme MIME türü başlığındaki kodlama ise:

Content-Type: text/html; charset=utf-8 

ardından tarayıcı UTF-8 olarak kaynağını yorumlayacaktır ve normal UTF-8 kodlu bayt olarak bütün bu karakterleri gönderebilir . Bu kullanıcı kasalar o ve yeniden açarsa bilgi HTML sayfası ile depolanan bir avantaja sahiptir

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

:

Alternatif olarak, böyle HTML sayfanızın başlığında kodlamasını belirtebilirsiniz daha sonra sabit diskinden.

Şahsen her ikisini de yaparım (sağ üstbilgiyi gönderin ve HTML sayfanıza meta-etiketini ekleyin). İki yer kodlama konusunda hemfikir olduğu sürece iyi olmalıdır.

Güncelleme: HTML 5 a new syntax for specifying the encoding ekledi:

<meta charset="utf-8"> 
İlgili konular