Tôi có nên sử dụng <! [CDATA […]]> trong HTML5 không?


80

Tôi khá chắc chắn <![CDATA[...]]>có thể sử dụng các phần trong XHTML5, nhưng còn HTML5 thì sao?

Câu trả lời:


56

Các CDATAcấu trúc là không thực sự cho HTML ở tất cả, đó là cho XML.

Đôi khi, mọi người sử dụng chúng trong scriptcác thẻ bên trong HTML vì nó không cần thiết phải thoát khỏi một số ký tự đặc biệt nhất định. Tuy nhiên, nó không có nghĩa là một yêu cầu (đối với HTML 4 hoặc 5).

Chỉnh sửa: Đây là nơi chúng tôi mở hộp sâu cũ mốc từ năm 2002 xem bạn đang gửi XHTML giống như text/htmlhay application/xhtml+xmlgiống như bạn "phải" đến :-)


1
Tôi đang gửi HTML (không phải XHTML) và tôi muốn điều đó. Thxs cho câu trả lời :)
Darryl Hein

Có thể sử dụng CDATAbên trong prethẻ để tôi không phải sửa tất cả các dấu ngoặc nhọn không?
gman

1
Không liên hệ. CDATA dành cho cả SGML và tập hợp con XML. Vì vậy, nó dành cho cả HTML và XHTML.
Johan Boulé

24

Từ cùng một trang @pst được liên kết đến :

Phân tích cú pháp phần tử cụ thể cho scriptstylethẻ , Hướng dẫn về khả năng tương thích XHTML-HTML : "Đoạn mã sau với tính năng thoát có thể đảm bảo các phần tử tập lệnh và kiểu sẽ hoạt động trong cả XHTML và HTML, kể cả các trình duyệt cũ hơn."

Khả năng tương thích ngược tối đa:

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

Phiên bản đơn giản hơn, loại không tương thích với "các trình duyệt cũ hơn nhiều":

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

Vì vậy, CDATAcó thể được sử dụng trong HTML5 và nó được khuyến nghị trong Hướng dẫn về khả năng tương thích XHTML-HTML . Này hữu ích cho nhiều thứ tiếng HTML / XML / XHTML trang , mà được tạo ra và phân tích cú pháp như XML quá trình phát triển, nhưng phục vụ như HTML5 để tương thích qua trình duyệt tốt hơn. Các trang đa thức có những lợi ích của chúng và bản thân tôi đã sử dụng điều này, vì việc gỡ lỗi XML / XHTML5 dễ dàng hơn nhiều. Ví dụ: Google Chrome sẽ gây ra lỗi cho XML / XHTML5 không hợp lệ (bao gồm cả thoát ký tự ví dụ ), trong khi cùng một trang được phân phối dưới dạng HTML5 sẽ "chỉ hoạt động" hay còn gọi là "có thể hoạt động".


12
các ý kiến trong một thẻ script là cần thiết nếu bạn muốn hỗ trợ một số trình duyệt cũ 20 năm, đó là NSCA Mosaic Netscape hoặc 1 ...
Antti Haapala

15

Thông số kỹ thuật dường như làm rõ vấn đề này. các thẻ script và style được coi là "phần tử văn bản thô". CDATA không cần thiết hoặc được phép đối với chúng. CDATA chỉ được sử dụng với "nội dung nước ngoài" - tức là MathML và SVG. Lưu ý rằng có một số hạn chế đối với những gì có thể đi trong thẻ script - về cơ bản bạn không thể đặt một cái gì đó như thế var x = '</script>'vào đó vì nó sẽ đóng thẻ và cần được tách ra như pst đã lưu ý trong câu trả lời của anh ấy. http://www.w3.org/TR/html5/syntax.html#cdata-rcdata-restrictions


5

Có thể xem: http://wiki.whatwg.org/wiki/HTML_vs._XHTML

<! [CDATA [...]]> là một nhận xét không có thật.

Trong HTML, <script>đã được bảo vệ - đây là lý do tại sao đôi khi nó phải được viết thành a = "<" + "/script>", để tránh gây nhầm lẫn cho trình duyệt. Lưu ý rằng mã hợp lệ bên ngoài CDATA trong HTML.


2
Tôi nghĩ rằng cách tốt nhất để thoát khỏi thẻ đóng là "<\ / script>". Tôi đã đọc rằng một số trình phân tích cú pháp chỉ kiểm tra "</", không phải "</script>"
marcus

@marcus Bạn nói đúng và đó </là mã thông báo đặc biệt duy nhất trong ngữ cảnh này. Câu trả lời mới hơn của tôi về chủ đề này đồng tình vì tôi đã cập nhật kiến ​​thức của mình theo thời gian ;-) Tôi sẽ cập nhật điều này. Điều đó đang được nói, có vẻ như thường có </scr+ ipt>tách và tôi không biết về một trình duyệt chính thống mà nó không hoạt động ...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.