JavaScript標籤和HTML中的CDATA有什麼用處?什麼是HTML中的CDATA?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
JavaScript標籤和HTML中的CDATA有什麼用處?什麼是HTML中的CDATA?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
解析器將解析XML文檔中的所有文本。
但是,CDATA部分內的文本將被解析器忽略。
CDATA - (非解析)字符數據
術語CDATA使用約不應由XML解析器解析的文本數據。
像「<」和「&」這樣的字符在XML元素中是非法的。
「<」將產生錯誤,因爲解析器將其解釋爲新元素的開始。
「&」將產生錯誤,因爲解析器將其解釋爲字符實體的開始。
某些文本(如JavaScript代碼)包含大量「<」或「&」字符。爲了避免錯誤,腳本代碼可以定義爲CDATA。
解析器忽略CDATA部分內的所有內容。
CDATA項與 「
<![CDATA[
」 開始,以 「]]>
」
程序輸出使用CDATA的XHTML文檔
CDATA部分容易被不同的解析結束因爲HTML解析器不能識別CDATA開始和結束標記,也不能識別HTML實體引用,例如
<script>
標記中的<
。這可能會導致Web瀏覽器出現渲染問題,並且如果用於顯示來自不受信任源的數據,則可能會導致跨站點腳本漏洞,因爲兩種解析器將不同意CDATA部分結束的位置。
CDATA
在HTML中完全沒有意義。
CDATA
是一個XML構造,它將標記的內容設置爲通常是#PCDATA分析的字符數據,而不是將其視爲#CDATA,即非分析字符數據。它僅在XHTML中相關且有效。
它用於script
標籤以避免解析<
和&
。在HTML中,這不是必需的,因爲在HTML中,script
已經是#CDATA。
CDATA是來自文檔字符集的一系列字符,可能包含字符實體。用戶代理應該如下解釋的屬性值: ,字符替換字符實體,
忽略換行符,
替換爲單個空格每個回車或標籤。
從http://en.wikipedia.org/wiki/CDATA:
既然是能夠使用低於跡象(<)和 符號(&)在網頁腳本中非常有用,並在較小程度上的風格, 無需要記住要逃避它們,通常在內聯文本和 XHTML文檔中使用CDATA 標記。但是,這樣的文件也可以通過HTML解析 分析器,它不承認CDATA標記,在CDATA標記 通常被註釋掉,因爲在這個JavaScript示例:
<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>
使用它的方式來編寫HTML和XHTML的公共子集,更便攜的希望。
在HTML中,<script>
是魔法逃脫一切,直到出現</script>
。
所以你可以這樣寫:
<script>x = '<br/>';
和<br/>
不會被視爲一個標籤。
這就是爲什麼字符串,例如:
x = '</scripts>'
必須進行轉義,如:
x = '</scr' + 'pts>'
參見:Why split the <script> tag when writing it with document.write()?
但XML(因此XHTML,這是一個 「子集」的XML,unlike HTML),並沒有那麼神奇:<br/>
會被視爲一個標籤。
<![CDATA[
是XHTML的方式來表達:
不分析任何標記,直到下一個
]]>
,認爲這是所有的字符串
的//
的加入使CDATA工作做好在HTML中也是如此。
在HTML <![CDATA[
不是魔術,所以它會由JavaScript運行。所以//
用於註釋掉。
的XHTML也看到//
,但會觀察它作爲一個空註釋行這不是一個問題:
//
也就是說:如果該文件是
<!DOCTYPE html>
與<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
script
語法但違反了互聯網的黃金法則:
不信任的第三方,或你的產品將打破
因此,Y不人使用它Javascript中標籤?在哪裏有什麼意義,謝謝 – SexyMF 2011-08-17 11:45:44
@SexyMF可能是因爲這些人輸入了XHTML文檔而不是SGML/HTML,並且/或者他們希望幫助符合標準的瀏覽器更少地正確加載他們的頁面。 – amn 2017-04-25 13:39:33
儘管已經快6歲了,但這仍然是我見過的CDATA的最佳解釋。 – freginold 2017-05-11 17:55:38