我使用JavaScript從XML生成HTML頁面(從XML文件生成表格), 以及我有一些XML結構等我寫HTML代碼如下JavaScript document.write(編碼的html標籤),儘可能地打印
document.write("<span>" + name + "</span>");
我讓我的變量如下
name = x[i].getElementsByTagName("NAME")[0].childNodes[0].nodeValue;
所以變量名包含任何節點NAME在我的XML文件結構包含 簡單的XML來證明:
<FILE>
<NAME>file 1.2.3</NAME>
<SIZE>1Kb</SIZE>
</FILE>
XML文件與否有關用戶編輯,讓使用者可將他/她想要什麼,所以如果用戶輸入:<script>alert(1);</script>
到名稱節點JavaScript是要打印出普通的HTML瀏覽器將會調用「alert(1)」。那就是我不想要發生的事情。
所有的編輯都是用「my」前端完成的,通過php函數htmlspecialchars();所以實際上哪些用戶會保存到名稱節點是「編碼」 HTML
<script>alert(3);</script>
甚至全部,這是不夠的,當XML被保存編碼的HTML代碼,JavaScript將它們打印正常標籤。
換句話說:我怎樣才能頁面上使用JS(文件撰寫)下面的文字寫的:<?php $=1; ?>
或<htmltag>whatever is here </htmltag>
,而不會破壞我的真正的HTML。
任何解決方案?
例子,這不工作,我會想到:
document.write("<span class=\"edit\"><script>alert(3);</script></span>");
SOLUTION
發現在網絡這個功能
function htmlspecialchars(str) {
if (typeof(str) == "string") {
str = str.replace(/&/g, "&"); /* must do & first */
str = str.replace(/"/g, """);
str = str.replace(/'/g, "'");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
}
return str;
}
它的工作要做,但我做的不是很明白爲什麼。
在XML文件中,它已經被「編碼」或者應該是安全呈現的形式(發送到document.write函數)。我只是再次做「htmlspecialchars」,它工作得很好。
document.write("<span>" + htmlspecialchars(name) + "</span>");
你可以如果沒有正確編碼它,不要在HTML中打印XML逐字。例如'<'是HTML中的特殊字符。請參閱SGML,HTML:https://tools.ietf.org/html/rfc1866#section-3。1 – hakre
根據你的目標,你需要照顧CDATA部分,因爲HTML沒有這些,但是XML有它們。此外,如果您在網絡上發現了某些內容,請將鏈接留在您的位置。同時添加您的解決方案作爲答案,而不是通過編輯問題。接受它。這是這個網站的工作原理。 – hakre