2010-10-18 38 views
0

我們的中間層需要做一些事情,以防止</script>在javascript字符串中逐字出現。例如,在所有瀏覽器中,第一遍HTML解析器將忽略javascript上下文,查看第一個關閉腳本,然後查看垃圾,然後查看第二個關閉腳本。請參閱:using-script-in-a-javascript-literal轉義:「var name ='</script>'」

<HTML> 
<BODY> 
    start 
    <SCRIPT> 
    alert("</SCRIPT>"); 
    </SCRIPT> 
    finish 
</BODY> 
</HTML> 

我的第一個解決這個問題的想法是擴大我們逃脫的JavaScript字符串包括「>」和「<」的人物 - 這似乎在我測試瀏覽器的工作,但沒有按」 t看看標準兼容:escapesequence.shtml

編輯:這條規則是專門爲呈現爲JavaScript字符串文字的內容。

+0

爲什麼不用'\ /'替換'/'? – rhino 2010-10-18 15:11:59

+0

這似乎是可能導致比解決問題更多的問題。無論如何,''多少次不小心在腳本代碼中結束? – Pointy 2010-10-18 15:13:06

+1

@rhino會弄亂'var x = a/b;'這樣的事情,所以你必須準確地解析Javascript以知道該字符出現在字符串文字中。 – Pointy 2010-10-18 15:13:55

回答

5

您需要刪除的文字</莫名其妙:

"<" + "/" 
"<\/" 
"<\x2F" 
"\x3C/" 
"<\u002F" 
"\u003C/" 

description of the CDATA type

雖然STYLESCRIPT元素使用CDATA他們的數據模型,這些元素,CDATA必須處理用戶代理不同。標記和實體必須被視爲原始文本並按原樣傳遞給應用程序。字符序列「</」(結束標記打開定界符)的首次出現被視爲終止元素內容的結尾。在有效的文檔中,這將是元素的結束標記。

相關問題