Mic*_*cah 25 javascript html-encode
鉴于文字
<b>This is some text</b>
Run Code Online (Sandbox Code Playgroud)
我想把它写到我的页面,以便它显示如下:
<b>This is some text</b>
而不是这样
这是一些文字
使用escape("<b>This is some text</b>")在firefox中给我这个可爱的宝石
%3Cb%3EThis%20is%20some%20text%3C/b%3E
Run Code Online (Sandbox Code Playgroud)
不是我所追求的.有任何想法吗?
lim*_*imc 58
这应该对你有用:http://blog.nickburwell.com/2011/02/escape-html-tags-in-javascript.html
function escapeHTML( string )
{
var pre = document.createElement('pre');
var text = document.createTextNode( string );
pre.appendChild(text);
return pre.innerHTML;
}
Run Code Online (Sandbox Code Playgroud)
安全警告
该函数不会转义单引号和双引号,如果在错误的上下文中使用,可能仍然会导致XSS.例如:
var userWebsite = '" onmouseover="alert(\'gotcha\')" "';
var profileLink = '<a href="' + escapeHtml(userWebsite) + '">Bob</a>';
var div = document.getElemenetById('target');
div.innerHtml = profileLink;
// <a href="" onmouseover="alert('gotcha')" "">Bob</a>
Run Code Online (Sandbox Code Playgroud)
小智 28
我最终这样做了:
function escapeHTML(s) {
return s.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/</g, '<')
.replace(/>/g, '>');
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*uan 17
对于HTML DOM文档可用的情况,我喜欢@limc的答案.
我喜欢@Michele Bosi和@Paolo对非HTML DOM文档环境(如Node.js)的回答.
@Michael Bosi的答案可以通过单次调用替换和巧妙的替换函数来消除调用替换4次的需要进行优化:
function escape(s) {
let lookup = {
'&': "&",
'"': """,
'<': "<",
'>': ">"
};
return s.replace( /[&"<>]/g, (c) => lookup[c] );
}
console.log(escape("<b>This is some text.</b>"));Run Code Online (Sandbox Code Playgroud)
@ Paolo的范围测试可以通过精心选择的正则表达式进行优化,并且可以通过使用替换函数来消除for循环:
function escape(s) {
return s.replace(
/[^0-9A-Za-z ]/g,
c => "&#" + c.charCodeAt(0) + ";"
);
}
console.log(escape("<b>This is some text</b>"));Run Code Online (Sandbox Code Playgroud)
正如@Paolo所指出的,这种策略适用于更多场景.
试试这个htmlentities for javascript
function htmlEntities(str) {
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35973 次 |
| 最近记录: |