2011-04-11 73 views
4

感謝您的閱讀!在javascript中打印html標籤

var data = "<html><head><title>Hello</title></head><body>Hello Body</body></html>"; 

我想打印data包括HTML代碼,而無需瀏覽器中呈現的HTML標籤,只是顯示「你好身體」。

我想:

str = str.replace("<", "");

但不成功。

+0

打印數據以什麼/在哪裏? – rsplak 2011-04-11 20:59:31

+3

準確地說,「打印」是什麼意思?打印哪裏? – 2011-04-11 20:59:35

+2

我認爲他意味着將該字符串寫入瀏覽器,使標籤轉義,以便它們在頁面上可見而不是解析到DOM中。 – Tesserex 2011-04-11 21:02:47

回答

11
data = data.replace(/</g, "&lt;").replace(/>/g, "&gt;"); 

當瀏覽器遇到&lt;(這被稱爲字符實體),它將與文字「<」取代它,讓您沒有他們得到呈現在頁面上顯示的HTML標記。

/</g是一個正則表達式,它只是表示「在字符串中匹配所有'<'」,而g表示全局。如果沒有g,它只會替換遇到的第一個「<」。

還有一個最後的注意事項,使用庫(如jQuery)來做到這一點更好。這是一種容易出錯並錯過邊緣案例的東西。讓硬化,經過充分測試和安全的庫函數爲您做好準備。

+0

爲簡單起見。 – JClaspill 2011-04-11 21:04:03

+0

太棒了!真的非常感謝TON的這段代碼。這有幫助! – 2011-04-11 22:09:19

+0

我推薦以下基督徒斯克伯拉斯的回答,他的方法更好。 – 2011-04-11 22:29:03

3

這是醜陋的,但你可以試試這個(從原型的實施escapeHTML()借用):

var data = "<html> <head> <title> Hello </title> </head> <body> Hello Body </body> </html>" 
    .replace(/&/g,'&amp;') 
    .replace(/</g,'&lt;') 
    .replace(/>/g,'&gt;'); 

document.write(data); 

當然,創造一個小幫手功能,效果會更好。

+0

謝謝Cory!這工作! – 2011-04-11 22:25:23

9

的實際(和更安全的固定)如下:

function htmlspecialchars(text){ 
    return jQuery('<div/>').text(text).html(); 
} 

在純JavaScript,這將是:

function htmlspecialchars(text){ 
    var tnd=document.createTextNode(text); 
    var div=document.createElement("DIV"); 
    div.appendChild(tnd); 
    return div.innerHTML; 
} 
+0

OP沒有指定jQuery,但這非常聰明! +1 – 2011-04-11 21:17:30

+1

@Pekka那麼,我正在輸入純粹的JavaScript實現,它需要一些時間:)。 – Christian 2011-04-11 21:24:36

+0

不錯!這比替換'<' and '>'要優越得多。 – 2011-04-11 21:26:13