HTML'de karakter kodlamaları - Character encodings in HTML

Köprü Metni Biçimlendirme Dili ( HTML ) 1991'den beri kullanımdayken, Aralık 1997'den itibaren HTML 4.0, uluslararası karakterlere makul ölçüde eksiksiz bir muamelenin verildiği ilk standartlaştırılmış versiyondu . Bir HTML belgesi, yedi bitlik ASCII aralığı dışında özel karakterler içerdiğinde , iki hedef dikkate alınmaya değerdir: bilginin bütünlüğü ve evrensel tarayıcı görüntüsü.

Belgenin karakter kodlamasını belirtme

Belgede hangi karakter kodlamasının kullanıldığını belirtmenin birkaç yolu vardır. İlk olarak, web sunucusu , tipik olarak şöyle görünecek olan Köprü Metni Aktarım Protokolü (HTTP) başlığına karakter kodlamasını veya " charset" içerebilir : Content-Type

Content-Type: text/html; charset=ISO-8859-4

Bu yöntem, HTTP sunucusuna, içerik anlaşmasına göre belgenin kodlamasını değiştirmek için uygun bir yol sağlar ; belirli HTTP sunucu yazılımı bunu yapabilir, örneğin Apache modülü ile mod_charset_lite .

HTML için bu bilgiyi headbelgenin üst kısmına yakın öğenin içine dahil etmek mümkündür :

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

HTML5 ayrıca aşağıdaki sözdiziminin tamamen aynı anlama gelmesine izin verir:

<meta charset="utf-8">

XHTML belgelerinin üçüncü bir seçeneği vardır: karakter kodlamasını XML bildirimi yoluyla aşağıdaki gibi ifade etmek :

<?xml version="1.0" encoding="ISO-8859-1"?>

Bu bildirim ayrıştırılana kadar karakter kodlaması bilinemeyeceğinden, bildirimin kendisi için hangi kodlamanın kullanıldığını bilmek bir sorun olabilir. Ana ilke, bildirimin saf ASCII ile kodlanmasıdır ve bu nedenle (bildirim dosyanın içindeyse) kodlamanın bir ASCII uzantısı olması gerekir . ASCII ile geriye dönük uyumlu olmayan kodlamalara izin vermek için, tarayıcıların bu tür kodlamalardaki bildirimleri ayrıştırabilmesi gerekir. Bu tür kodlamalara örnek olarak UTF-16BE ve UTF-16LE verilebilir .

Kodlama algılama algoritması

HTML5'ten itibaren önerilen karakter seti UTF-8'dir . Aşağıdakiler dahil olmak üzere birden çok girdi kaynağına dayalı olarak belgenin karakter kodlamasını belirlemek için spesifikasyonda bir "kodlama koklama algoritması" tanımlanmıştır:

  1. Açık kullanıcı talimatı
  2. Belgenin ilk 1024 baytında açık bir meta etiket
  3. Belgenin ilk üç baytı içinde bir Bayt sırası işareti
  4. HTTP İçerik Türü veya diğer aktarım katmanı bilgileri
  5. Belirli dizileri veya bayt değerleri aralıklarını arayan belge baytlarının analizi ve diğer geçici algılama mekanizmaları.

Yazdırılabilir ASCII aralığının (32 ila 126) dışındaki karakterler genellikle yanlış görünür. Bu, İngilizce konuşan kullanıcılar için birkaç sorun yaratır, ancak diğer diller düzenli olarak - bazı durumlarda her zaman - bu aralığın dışında karakterler gerektirir. Birkaç farklı çok baytlı kodlamanın kullanıldığı Çince, Japonca ve Korece ( CJK ) dil ortamlarında, otomatik algılama da sıklıkla kullanılır. Son olarak, tarayıcılar genellikle kullanıcının hatalı karakter kümesi etiketini manuel olarak da geçersiz kılmasına izin verir .

Çok dilli web sitelerinin ve Batı dışındaki dillerdeki web sitelerinin, tüm diller için aynı kodlamanın kullanılmasına izin veren UTF-8'i kullanması giderek yaygınlaşıyor . Tüm diller için de kullanılabilen UTF-16 veya UTF-32 , bayt yönelimli ASCII üst küme kodlamasını varsayan programlama dillerinde ele alınması daha zor olabileceğinden ve metin için daha az verimli olduğundan daha az kullanılır. genellikle HTML belgeleri için geçerli olan yüksek sıklıkta ASCII karakterleri.

Bir sayfanın başarılı bir şekilde görüntülenmesi, mutlaka kodlamasının doğru şekilde belirtildiğinin bir göstergesi değildir. Sayfanın yaratıcısı ve okuyucusu, platforma özel karakter kodlaması varsayıyorsa ve sunucu herhangi bir tanımlayıcı bilgi göndermiyorsa, okuyucu yine de sayfayı oluşturanın amaçladığı gibi, ancak farklı platformlardaki veya farklı ana dillerdeki diğer okuyucular sayfayı görecektir. sayfayı istendiği gibi görmeyecek.

İzin verilen kodlamalar

En son HTML standartları tarafından referans alınan WHATWG Kodlama Standardı (geçerli WHATWG HTML Yaşam Standardı ve ayrıca eski rakip W3C HTML 5.0 ve 5.1), tarayıcıların desteklemesi gereken kodlamaların bir listesini belirtir. HTML standartları, diğer kodlamaların desteklenmesini yasaklar. Kodlama Standardı ayrıca yeni biçimlerin, yeni protokollerin (mevcut biçimler kullanılsa bile) ve yeni belge yazarlarının yalnızca UTF-8 kullanmasını şart koşar .

UTF-8'in yanı sıra, aşağıdaki kodlamalar, Kodlama Standardına atıfta bulunularak HTML standardının kendisinde açıkça listelenmiştir:

Aşağıdaki ek kodlamalar Kodlama Standardında listelenmiştir ve bu nedenle bunlar için destek de gereklidir:

Aşağıdaki kodlamalar, yasaklanmış kodlamaların açık örnekleri olarak listelenmiştir:

Standart ayrıca, belirli kodlamalar olarak etiketlenen tüm içeriği değiştirme karakterine ( ) eşleyen ve onu işlemeyi reddeden bir "değiştirme" kod çözücüyü de tanımlar . Bu, kötü niyetli içeriği maskelemek için desteklenen kodlamalarda istemci ve sunucu arasındaki bir farktan yararlanabilecek saldırıları (örneğin siteler arası komut dosyası çalıştırma ) önlemeyi amaçlar . Aynı güvenlik endişesi , ASCII bayt dizilerinin farklı şekilde yorumlanmasına da izin veren ISO-2022-JP ve UTF-16 için geçerli olsa da, konuşlandırılmış içerikte nispeten daha sık kullanıldıkları için bu yaklaşım onlar için uygun görülmedi. Aşağıdaki kodlamalar bu işlemi alır:

Karakter referansları

Yerel karakter kodlamalarına ek olarak, karakterler sayısal karakter referansları ( ondalık veya onaltılık ) veya karakter varlık referansları olabilen karakter referansları olarak da kodlanabilir . Karakter varlık referanslarına bazen adlandırılmış varlıklar veya HTML için HTML varlıkları da denir . HTML'nin karakter referansları kullanımı SGML'den türetilmiştir .

HTML karakter referansları

Bir sayısal karakter referansı HTML onun tarafından bir karaktere karşılık gelir Evrensel Karakter Seti / Unicode kod noktası ve biçimi kullanır

&#nnnn;

veya

&#xhhhh;

burada nnnn ondalık biçimde kod noktasıdır ve hhhh onaltılık biçimde kod noktasıdır . X XML belgelerinde küçük harf olmalıdır. Nnnn veya hhhh basamak herhangi bir sayıda olabilir ve önde gelen sıfır içerebilir. Hhhh büyük harfli zamanki tarzı olsa, büyük ve küçük karıştırın olabilir.

HTML belgelerinin alıcıları tarafından kullanılan tüm web tarayıcıları veya e-posta istemcileri veya HTML belgelerinin yazarları tarafından kullanılan metin düzenleyicileri , tüm HTML karakterlerini oluşturamaz. Çoğu modern yazılım, kullanıcının dili için karakterlerin çoğunu veya tamamını görüntüleyebilir ve oluşturamayacakları karakterler için bir kutu veya başka bir açık gösterge çizer.

0 ile 127 arasındaki kodlar için, orijinal 7 bitlik ASCII standart seti, bu karakterlerin çoğu bir karakter referansı olmadan kullanılabilir. 160'tan 255'e kadar olan kodların tümü, karakter varlık adları kullanılarak oluşturulabilir . Varlık adları kullanılarak yalnızca birkaç yüksek numaralı kod oluşturulabilir, ancak tümü ondalık sayı karakter referansı ile oluşturulabilir.

Karakter varlığı referansları, adın büyük/küçük harfe duyarlı bir alfasayısal dize olduğu biçime de sahip olabilir . Örneğin, "λ" bir HTML belgesindeki gibi kodlanabilir . Karakter varlık referansları , , ve çünkü, HTML ve SGML önceden tanımlanmış , , ve zaten sınırlandırmaktadır biçimlendirme için kullanılır. Bu, özellikle HTML5'ten önceki XML'in (') varlığını içermiyordu . Adlandırılmış tüm HTML karakter varlığı referanslarının ve bunların tanıtıldıkları sürümlerin listesi için bkz . XML ve HTML karakter varlığı referanslarının listesi . &name;&lambda;&lt;&gt;&quot;&amp;<>"&&apos;

HTML karakter referanslarının gereksiz kullanımı, HTML okunabilirliğini önemli ölçüde azaltabilir. Bir web sayfası için karakter kodlaması uygun şekilde seçilirse, HTML karakter referansları genellikle yalnızca yukarıda bahsedildiği gibi karakterleri sınırlayan işaretleme için ve birkaç özel karakter için gereklidir (veya UTF-8 gibi yerel bir Unicode kodlaması kullanılıyorsa hiç yoktur). ). Hatalı HTML varlığı kaçışı, siteler arası komut dosyası çalıştırma gibi enjeksiyon saldırıları için güvenlik açıkları da açabilir . HTML nitelikleri tırnak içine alınmadan bırakılırsa, en önemlisi boşluk ve sekme gibi boşluklar olmak üzere belirli karakterlerden varlıklar kullanılarak çıkış yapılmalıdır. HTML ile ilgili diğer dillerin karakterlerden kaçmak için kendi yöntemleri vardır.

XML karakter referansları

Geniş bir karakter varlığı referansları yelpazesine sahip geleneksel HTML'den farklı olarak, XML'de sadece beş önceden tanımlanmış karakter varlığı referansı vardır. Bunlar, belirli bağlamlarda işaretlemeye duyarlı karakterlerden kaçmak için kullanılır:

  • &amp; → & ( ve işareti , U+0026)
  • &lt; → < (küçüktür işareti, U+003C)
  • &gt; → > (büyüktür işareti, U+003E)
  • &quot; → " (tırnak işareti, U+0022)
  • &apos; → ' (kesme işareti, U+0027)

Diğer tüm karakter varlığı referansları, kullanılmadan önce tanımlanmalıdır. Örneğin, &eacute;bir XML belgesinde (é, Latince küçük E harfini, akut vurgulu, U+00E9'u Unicode'da verir) kullanımı, varlık önceden tanımlanmadığı sürece bir hata üretecektir. XML ayrıca xonaltılık sayısal referansların küçük harf olmasını gerektirir : örneğin &#xA1byerine &#XA1b. Bir XML uygulaması olan XHTML , XML'in önceden tanımlanmış varlıklarıyla birlikte HTML varlık kümesini destekler.

Ayrıca bakınız

Referanslar

Dış bağlantılar