2010-04-10 117 views
11

是否有可能使用任何可能的方式(如正則表達式或其他方式)將html標記轉換爲使用javascript/jquery的html實體。如果是,那麼如何?將標籤轉換爲html實體

例子:

<div>應轉換爲&lt;div&gt;

注:我說的不是服務器端語言。

回答

28

試試這個功能的HTML特殊字符:

function htmlencode(str) { 
    return str.replace(/[&<>"']/g, function($0) { 
     return "&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";"; 
    }); 
} 
+0

爲什麼不'''而不是'#39'? – 2010-04-10 15:35:17

+0

@Eli Gray:*實體是在XML 1.0中引入的(因此爲XHTML定義),但它沒有在HTML 4中定義。(請參閱http://www.w3.org/TR/xhtml1/#C_16) – Gumbo 2010-04-10 15:48:40

+2

多麼驚人的一小段代碼。花了我一分鐘,看看你在那裏做什麼!你已經過了我的晚上。 – 2010-11-02 22:07:01

0
var d = "<div>" 
d = d.replace(/<|>/g, function(chr){ 
    return chr == "<" ? "&lt;" : "&gt;" 
}) 
console.log(d) 
7

當你標記與jQuery,jQuery的供電解決方案應爲你工作:

$("<div>").text("<div>bleh</div>whatever").html() 

替換參數文本方法與你想逃避的任何標記。

+0

非常有幫助的區別。 – 2011-11-18 03:25:01

1

如果你有變量,要插入它在一個div上,你可以調用文本()。

var myVar = "<span><strong>Some vars</strong> Some var extra</span>"; 
$("div").text(myVar); 
1

我有2個安全編碼HTML的快速和小型實現。

可以編碼所有字符的字符串:

function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})} 

或者只是針對主角擔心(&,inebreaks,<,>,「和「),如:

function encode(r){ 
 
return r.replace(/[\x26\x0A\<>'"]/g,function(r){return"&#"+r.charCodeAt(0)+";"}) 
 
} 
 

 
var myString='Encode HTML entities!\n"Safe" escape <script></'+'script> & other tags!'; 
 

 
test.value=encode(myString); 
 

 
testing.innerHTML=encode(myString); 
 

 
/************* 
 
* \x26 is &ampersand (it has to be first), 
 
* \x0A is newline, 
 
*************/
<p><b>What JavaScript Generated:</b></p> 
 

 
<textarea id=test rows="3" cols="55"></textarea> 
 

 
<p><b>What It Renders Too In HTML:</b></p> 
 

 
<div id="testing">www.WHAK.com</div>

0

有一個簡潔的方法這使用String.prototype.replace()和正則表達式如下:

var tag = "<h1>This should </h1>be bold<h2> and big</h2>"; 
var escapedTag = tag.replace(/</g, "&lt;").replace(/>/g, "&gt;");