</script>
phải chia tay vì nếu không nó sẽ kết thúc <script></script>
khối bao vây quá sớm. Thực sự nó nên được phân chia giữa <
và /
, bởi vì một khối tập lệnh được cho là (theo SGML) bị chấm dứt bởi bất kỳ chuỗi mở thẻ cuối (ETAGO) nào (ví dụ </
) :
Mặc dù các phần tử STYLE và SCRIPT sử dụng CDATA cho mô hình dữ liệu của chúng, nhưng đối với các phần tử này, CDATA phải được xử lý khác nhau bởi các tác nhân người dùng. Đánh dấu và các thực thể phải được coi là văn bản thô và được chuyển đến ứng dụng. Sự xuất hiện đầu tiên của chuỗi ký tự " </
" (dấu phân cách mở thẻ cuối) được coi là chấm dứt kết thúc nội dung của phần tử. Trong các tài liệu hợp lệ, đây sẽ là thẻ kết thúc cho phần tử.
Tuy nhiên, trong thực tế, các trình duyệt chỉ kết thúc phân tích cú pháp khối CDATA trên </script>
thẻ đóng thực tế .
Trong XHTML, không có xử lý đặc biệt nào cho các khối tập lệnh, do đó, bất kỳ ký tự <
(hoặc &
) nào bên trong chúng phải &escaped;
giống như trong bất kỳ phần tử nào khác. Tuy nhiên, sau đó các trình duyệt đang phân tích XHTML dưới dạng HTML trường học cũ sẽ bị nhầm lẫn. Có các cách giải quyết liên quan đến các khối CDATA, nhưng đơn giản nhất là tránh sử dụng các ký tự này không thoát. Cách tốt hơn để viết một phần tử tập lệnh từ tập lệnh hoạt động trên một trong hai loại trình phân tích cú pháp sẽ là:
<script type="text/javascript">
document.write('\x3Cscript type="text/javascript" src="foo.js">\x3C/script>');
</script>
\/
là một chuỗi thoát hợp lệ cho/
, vậy tại sao không sử dụng chuỗi đó thay vì các chuỗi thoát theo nghĩa đen<
? Ví dụdocument.write('<script src=foo.js><\/script>');
. Ngoài ra,</script>
không phải là chuỗi ký tự duy nhất có thể đóng một<script>
phần tử. Một số thông tin thêm ở đây: mathiasbynens.be/notes/etago