2010-07-21 25 views

Trả lời

55

Cấu trúc CDATA không thực sự là HTML, nó dành cho XML.

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

Edit: Đây là nơi chúng ta mở rằng thực sự mốc lon cũ của sâu từ năm 2002 về việc liệu bạn đang gửi XHTML như text/html hoặc như application/xhtml+xml như bạn đang “giả” để :-)

+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 :) –

+0

Có thể sử dụng 'CDATA' bên trong một thẻ' pre' vì vậy tôi không phải sửa tất cả các dấu ngoặc nhọn của mình? – gman

5

Có lẽ thấy: http://wiki.whatwg.org/wiki/HTML_vs._XHTML

< [CDATA [...]] > là một lời 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 phải được viết là a = "<" + "/script>", để tránh nhầm lẫn giữa trình duyệt. Lưu ý rằng mã hợp lệ bên ngoài CDATA bằng HTML.

+2

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

+0

@marcus Bạn đúng và ' ', 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 ... –

14

Các spec dường như làm sáng tỏ vấn đề này. thẻ tập lệnh và kiểu được coi là "phần tử văn bản thô". CDATA không cần thiết hoặc được phép cho 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ế cho 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ư var x = '</script>' trong đó bởi vì nó sẽ đóng thẻ và cần phải được chia như pst lưu ý trong câu trả lời của mình. http://www.w3.org/TR/html5/syntax.html#cdata-rcdata-restrictions

22

Từ cùng một trang @pst linked to:

Element-specific parsing for script and style tags, Hướng dẫn XHTML-HTML tương thích: "Các mã sau đây với thoát có thể đảm bảo kịch bản và các yếu tố phong cách sẽ làm việc trong cả hai XHTML và HTML, bao gồm cả cũ trình duyệt. "

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

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

đơn giản hơn phiên bản, loại không phù hợp với "trình duyệt cũ hơn nhiều":

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

Vì vậy, CDATA thể được sử dụng trong HTML5, và nó được đề nghị trong Hướng dẫn về khả năng tương thích XHTML-HTML. Điều này hữu ích cho polyglot HTML/XML/XHTML pages, được tạo và phân tích cú pháp dưới dạng XML trong quá trình phát triển, nhưng được phân phát dưới dạng HTML5 để có khả năng tương thích tốt hơn giữa các trình duyệt. Polyglot pages has their benefits và tôi đã tự sử dụng bản thân này, vì việc gỡ lỗi XML/XHTML5 dễ dàng hơn nhiều. Google Chrome, ví dụ, sẽ ném một lỗi cho XML/XHTML5 không hợp lệ (bao gồm ví dụ character escaping), trong khi cùng một trang được phân phát dưới dạng HTML5 sẽ "chỉ hoạt động" hay còn gọi là "có thể hoạt động".

+10

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 hoặc Netscape 1 ... –

Các vấn đề liên quan