Czy powinienem używać <! [CDATA […]]> w HTML5?

80

Jestem prawie pewien, że <![CDATA[...]]>sekcje mogą być używane w XHTML5, ale co z HTML5?

Darryl Hein
źródło

Odpowiedzi:

56

CDATAStruktura nie jest tak naprawdę dla HTML w ogóle, to dla XML.

Ludzie czasami używają ich w HTML wewnątrz scripttagów, ponieważ eliminuje to potrzebę ucieczki przed niektórymi znakami specjalnymi. Nie jest to jednak żaden wymóg (dla HTML 4 lub 5).

Edycja: W tym miejscu otwieramy tę naprawdę spleśniałą, starą puszkę robaków z 2002 roku, aby dowiedzieć się, czy wysyłasz XHTML w taki text/htmlsposób, application/xhtml+xmljak „powinien” :-)

holsk
źródło
1
Wysyłam HTML (nie XHTML) i tego chcę. Dzięki za odpowiedź :)
Darryl Hein
Czy można używać CDATAwewnątrz pretagu, aby nie musieć naprawiać wszystkich nawiasów kątowych?
gman
1
Niedokładny. CDATA jest przeznaczony zarówno dla SGML, jak i podzbioru XML. Więc to jest dla HTML i XHTML.
Johan Boulé
24

Z tej samej strony @pst połączonej z :

Analiza poszczególnych elementów dla tagów scriptistyle , Wskazówki dotyczące zgodności XHTML-HTML : „Poniższy kod ze znakami ucieczki może zapewnić, że elementy skryptu i stylu będą działać zarówno w XHTML, jak i HTML, w tym w starszych przeglądarkach”.

Maksymalna kompatybilność wsteczna:

<script type="text/javascript"><!--//--><![CDATA[//><!--
    ...
//--><!]]></script>

Prostsza wersja, w pewnym sensie niezgodna z „znacznie starszymi przeglądarkami”:

<script>//<![CDATA[
   ...
//]]></script>

Dlatego CDATAmoże być używany w HTML5 i jest zalecany w Poradniku dotyczącym zgodności XHTML-HTML . Jest to przydatne w przypadku stron poliglotowych HTML / XML / XHTML , które są tworzone i analizowane jako XML podczas programowania, ale służyły jako HTML5 dla lepszej kompatybilności z różnymi przeglądarkami. Strony Polyglot mają swoje zalety i sam z tego korzystałem, ponieważ znacznie łatwiej jest debugować XML / XHTML5. Na przykład Google Chrome zgłosi błąd dotyczący nieprawidłowego XML / XHTML5 (w tym na przykład zmiany znaczenia znaków ), podczas gdy ta sama strona wyświetlana jako HTML5 będzie „po prostu działać”, czyli „prawdopodobnie będzie działać”.

Joel Purra
źródło
12
komentarze w tagu skryptu są potrzebne, jeśli chcesz obsługiwać jakieś 20-letnie przeglądarki, czyli NSCA Mosaic lub Netscape 1 ...
Antti Haapala.
15

Wydaje się, że specyfikacja wyjaśnia tę kwestię. Znaczniki skryptu i stylu są traktowane jako „nieprzetworzone elementy tekstowe”. CDATA nie jest im potrzebne ani dozwolone. CDATA jest używane tylko z „obcą treścią” - tj. MathML i SVG. Zwróć uwagę, że istnieją pewne ograniczenia co do tego, co może var x = '</script>'znajdować się w tagu skryptu - w zasadzie nie możesz tam umieszczać czegoś podobnego, ponieważ zamknie to tag i musi zostać podzielone tak, jak pst zanotowano w jego odpowiedzi. http://www.w3.org/TR/html5/syntax.html#cdata-rcdata-restrictions

rmarscher
źródło
5

Być może zobacz: http://wiki.whatwg.org/wiki/HTML_vs._XHTML

<! [CDATA [...]]> to fałszywy komentarz.

W HTML <script>jest już chroniony - dlatego czasami musi być napisany jako a = "<" + "/script>", aby uniknąć dezorientacji przeglądarki. Zauważ, że kod jest ważny poza CDATA w HTML.


źródło
2
Myślę, że najlepszym sposobem na uniknięcie znacznika końcowego jest „<\ / script>”. Czytałem, że niektóre parsery sprawdzają tylko „</”, a nie „</script>”
marcus
@marcus Masz rację i </jest to jedyny specjalny znak w tym kontekście. Moje nowsze odpowiedzi na ten temat są zgodne, ponieważ moja wiedza była aktualizowana z biegiem czasu ;-) Zaktualizuję to. Biorąc to pod uwagę, wydaje się, że często występuje podział </scr+ ipt>, a nie znam głównej przeglądarki, w której to nie działa ...