HTML5, HTML yorumlama standardını değiştirir mi?


131

Son zamanlarda, muhtemelen HTML5'te yorum yapmanın yeni bir yolu olduğunu keşfettim.

<!-- -->Okuduğum tipik çok satırlı yorum yerine, IDE'min düzenli olarak yorum yaptığını fark ettiğimi düşündüm<!div > . Bu yüzden test ettim ve Chrome'un bu etiketi yorumlamasını şaşırttı. Bu sadece daha yakın dışarı yorum yapmak zorunda, etiket ve div değil içindekileri dışarı yorumladı <!/div>diğer div'leri kapanış önlemek için.

Bir başkasını test ettim ve görünen o ki, genellikle herhangi bir etiketin açılışının önüne bir ünlem işareti koymak, bu sembol <, bu etiketin yorumlanmasına neden oluyor.

Bu gerçekten yeni mi? Kötü bir uygulama mı? Aslında çok kullanışlıdır, ancak henüz pratik mi (yeni değilse)?

Düzenleme ekstra ayrıntıları: Bu özel bir sözdizimi sözdizimi hatası ya da yanlış yorumlamaları iyi bir neden olmasına rağmen, nasıl Chrome'u gel aslında onları tam yorumlar gibi kılar?

Kod şu şekilde yazılmıştır :

<!div displayed> some text here that is still displayed <!/div>

Ve sonra şu şekilde oluşturulur :

<!--div displayed--> some text here that is still displayed <!--/div-->

19
Büyük olasılıkla bu sadece bir sözdizimi hatası ve / veya anlamsız etikettir ve bu nedenle göz ardı edilir.
deceze

@deceze Tarayıcıların html'yi daha az katı kurallara göre nasıl oluşturdukları konusunda esnek olabildiklerini biraz bekliyordum.
Andrew

1
@ Lemony-Andrew Ne IDE bunu yapar? Seçilen yanıta göre, bunu bir sorun olarak bildirebiliriz (veya açık kaynaklıysa düzeltebiliriz).
Dereckson

1
@Derecksonit Gözlerimin beni aldatmadığından emin olmak için resmi cevap verildikten sonra IDE'mi iki kez kontrol ettim. Gerçekte yorum yapılmamıştı, ancak benzer olan normal metin rengiydi. Bunların hepsi tesadüfen oldu.
Andrew

Yanıtlar:


196

HTML5'te yorumlar için yeni bir standart yoktur. Tek geçerli yorum sözdizimi hala geçerlidir <!-- -->. Gönderen W3C HTML5 bölüm 8.1.6 :

Yorumlar dört karakter dizisi U + 003C DAHA AZ İŞARET, U + 0021 İŞARET İŞARETİ, U + 002D HYPHEN-MINUS, U + 002D HYPHEN-MINUS ( <!--) ile başlamalıdır .

<!HTML5'in parçası değildir SGML DTD biçimlendirme, sözdizimi kaynaklanır. HTML5'te yorumlar, CDATA bölümleri ve DOCTYPE bildirimi için ayrılmıştır. Bu nedenle, bu alternatifin kötü bir uygulama olup olmadığı, eski işaretlemenin kullanımını (veya daha kötüsü, bağımlılığı) kötü bir uygulama olarak değerlendirip değerlendirmediğinize bağlıdır.

Validator.nu, sahip olduğunuz şeyi "Sahte yorum" olarak adlandırır. - bu, geçerli bir yorum olmasa bile yorum olarak değerlendirildiği anlamına gelir. Bu, muhtemelen SGML tabanlı olan ve biçimlendirme bildirimlerine sahip olan HTML5 öncesi ile geriye dönük uyumluluk içindir <!FOO>, bu yüzden buna yeni demezdim. Onlar davranılıyor sebebi gibi SGML bildirimlerin değil işlenecek anlamına özel beyanlar çünkü yorumların olmakla birlikte, anlamsız (yukarıdaki istisnalarla) HTML5'teki olduğundan, bildiğim kadarıyla HTML5 DOM söz konusu olduğunda bunlar şunlardır fazla yorum dışında bir şey .

Bölüm 8.2.4'teki aşağıdaki adımlar , Chrome'un harfi harfine takip ettiği anlaşılan bu sonuca götürür:

  1. 8.2.4.1 Veri durumu :

    Sonraki giriş karakterini tüket:

    "<" (U + 003C)
    Etiket açık durumuna geçin.

  2. 8.2.4.8 Etiket açık durumu :

    Sonraki giriş karakterini tüket:

    "!" (U + 0021)
    Biçimlendirme bildirimi açık durumuna geç.

  3. 8.2.4.45 Biçimlendirme bildirimi açık durumu :

    Sonraki iki karakterin her ikisi de "-" (U + 002D) karakteriyse, bu iki karakteri tüketin, verileri boş dize olan bir yorum simgesi oluşturun ve yorum başlangıç ​​durumuna geçin.

    Aksi takdirde, sonraki yedi karakter "DOCTYPE" sözcüğü için ASCII büyük / küçük harf duyarlı olmayan bir eşleşmeyse, bu karakterleri tüketin ve DOCTYPE durumuna geçin.

    Aksi takdirde, ayarlanmış bir geçerli düğüm varsa ve bu, HTML ad alanında bir öğe değilse ve sonraki yedi karakter, "[CDATA [" dizesi için büyük / küçük harfe duyarlı bir eşleşmeyse (U + ile beş büyük harf "CDATA" 005B SOL KARE BRAKET karakteri öncesinde ve sonrasında), sonra bu karakterleri tüketin ve CDATA bölüm durumuna geçin.

    Aksi takdirde, bu bir ayrıştırma hatasıdır. Sahte yorum durumuna geçin. Varsa tüketilen bir sonraki karakter, yorumda yer alacak ilk karakterdir.

    Sadece karşılaşılan karakter dizisi ise yorum başlangıç ​​durumuna geçmeyi söylediğine dikkat edin <!--, aksi takdirde sahte bir yorumdur. Bu, yukarıdaki 8.1.6 numaralı bölümde belirtilenleri yansıtır.

  4. 8.2.4.44 Sahte yorum durumu :

    İlk ">" (U + 003E) karakterine veya dosyanın sonuna (EOF) kadar (hangisi önce gelirse) her karakteri tüketin. Verileri, durum makinesinin sahte yorum durumuna geçmesine neden olan karakterden başlayıp son kullanılan karakterden hemen önceki karaktere kadar (yani karaktere kadar) tüm karakterlerin birleşiminden oluşan bir yorum jetonu yayınlayın. U + 003E veya EOF karakterinden hemen önce), ancak herhangi bir U + 0000 NULL karakteri U + FFFD DEĞİŞTİRME KARAKTERİ karakterleriyle değiştirilir. (Yorum dosyanın (EOF) sonunda başlatılmışsa, jeton boştur. Benzer şekilde, " <!>" dizesi tarafından oluşturulmuşsa jeton boştur .)

    Düz İngilizce, bu dönüşler <!div displayed>içine <!--div displayed-->ve <!/div>içine <!--/div-->tam olarak söz konusu tanımladı.

Son bir not olarak, HTML5 uyumlu diğer ayrıştırıcıların Chrome ile aynı şekilde davranmasını bekleyebilirsiniz.


11
Bu olayın arkasındaki resmi gerekçeyi bulmaya zaman ayırdığınız için teşekkür ederiz. İşleri epeyce açıklığa kavuşturur ve yanlış varsayımıma çok fazla geçerlilik verir.
Andrew

2
HTML5 spesifikasyonunun "geçersiz" içeriği işlemek için kurallara sahip olması tuhaf. Geçersizse, hiç işlenmemelidir.
Arturo Torres Sánchez

2
Eh, HTML ve web dilleri böyle katıdır. Hatalı kod yapısının bu kadar yumuşak işlenmesinin nedeni daha kaliteli siteler içindir. Bir tarayıcı ne kadar çok web sitesini görüntüleyebilir ve yanlış sözdizimiyle doğru bir şekilde görüntüleyebilirse, son kullanıcıları o kadar mutlu olacaktır. Genel web standartları yazarları (çoğunlukla diğeri w3 değil), tarayıcı satıcılarının bu nedenle yönergeleri takip etmediklerini fark ettiler. HTML5 geldi ve yalnızca tasarımı resmi olarak daha esnek hale getirme fikri üzerine inşa edildi.
Andrew

3
@ ArturoTorresSánchez: XHTML, "geçersiz içerik = hata" yaklaşımını denedi ve perişan bir şekilde başarısız oldu. Ayrıca, kurallar temelde "bu sahte yorumu ayrıştırmayın, sadece yorum olarak kabul edin ve bulduğunuz sonraki geçerli şeyi ayrıştırın" diyor. Dolayısıyla, bakış açınıza bağlı olarak, HTML5 istediğiniz şeyi yapmaz çünkü istediğiniz şey berbattır veya HTML5 tam olarak istediğinizi yapar.
slebetman

1
@ ArturoTorresSánchez: Tarihsel olarak, HTML sunucuları her tür tarayıcıya aynı karakter dizisini sunmayı beklerdi; Bir belge biçimini, eski ayrıştırıcıların eski ayrıştırıcıların göz ardı etmesi gereken "isteğe bağlı" daha yeni özellikleri kullanan belgeleri ayırt edebilecekleri şekilde tasarlamak mümkün olsa da, daha önemli yeni özellikler kullanan ve bu belgeyi kullanmayan tarayıcılar tarafından reddedilmelidir. Onları desteklemek ve tamamen geçersiz olan belgeler, oluşum yıllarında HTML ile böyle bir şey yapılmadı.
supercat

12

Bunun <!gibi işaretleme beyanları anlamına geldiği için bunun iyi bir alışkanlık olduğunu düşünmüyorum <!DOCTYPE. Böylece yorumlandığını düşünüyorsunuz (iyi ... tarayıcı onu yorumlamaya çalışacaktır).

Görünmese bile, bu HTML kodunu yorumlamak için doğru sözdizimi gibi görünmüyor.


O halde olabilir gerçek olamayacak, nasıl Krom aslında şimdi bu dışarı yorumladı etiketleri, ancak doctype yapar gelir.
Andrew

4
Öneri (emin değilim, sadece tahmin): yorumlamaya çalışır> yapamaz> yorum yapamaz?
Yves Lange

Bu bana yeterince makul geliyor.
Andrew

Yine (ısrar ettiğim için özür dilerim), ancak bunun sadece bir varsayım olduğunu unutmayın!
Yves Lange
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.