2010-04-10 136 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;");