2013-02-03 55 views
0

我使用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

&lt;script&gt;alert(3);&lt;/script&gt; 

甚至全部,這是不夠的,當XML被保存編碼的HTML代碼,JavaScript將它們打印正常標籤。

換句話說:我怎樣才能頁面上使用JS(文件撰寫)下面的文字寫的:<?php $=1; ?><htmltag>whatever is here </htmltag>,而不會破壞我的真正的HTML。

任何解決方案?

例子,這不工作,我會想到:

document.write("<span class=\"edit\">&lt;script&gt;alert(3);&lt;/script&gt;</span>"); 

SOLUTION

發現在網絡這個功能

function htmlspecialchars(str) { 
if (typeof(str) == "string") { 
    str = str.replace(/&/g, "&amp;"); /* must do &amp; first */ 
    str = str.replace(/"/g, "&quot;"); 
    str = str.replace(/'/g, "&#039;"); 
    str = str.replace(/</g, "&lt;"); 
    str = str.replace(/>/g, "&gt;"); 
} 
return str; 
} 

它的工作要做,但我做的不是很明白爲什麼。

在XML文件中,它已經被「編碼」或者應該是安全呈現的形式(發送到document.write函數)。我只是再次做「htmlspecialchars」,它工作得很好。

document.write("<span>" + htmlspecialchars(name) + "</span>"); 
+0

你可以如果沒有正確編碼它,不要在HTML中打印XML逐字。例如'<'是HTML中的特殊字符。請參閱SGML,HTML:https://tools.ietf.org/html/rfc1866#section-3。1 – hakre

+0

根據你的目標,你需要照顧CDATA部分,因爲HTML沒有這些,但是XML有它們。此外,如果您在網絡上發現了某些內容,請將鏈接留在您的位置。同時添加您的解決方案作爲答案,而不是通過編輯問題。接受它。這是這個網站的工作原理。 – hakre

回答

0

您是否嘗試過使用「單引號」? :

document.write('<span class="edit">' + name + '</span>'); 

如果你想創建動態元素,如果你想再次使用的JavaScript這些元素,你應該使用DOM函數(的createElement,一個createTextNode,createAttribute):

http://reference.sitepoint.com/javascript/Document/createElement

+1

我只是用javascript生成表格,問題是當** name **包含編碼的html標記時,它將打印爲「普通」標記。它與單引號無關(我99%肯定)。 – Kyslik