显然,这比我想象的要难找到。甚至很简单..。
JavaScript中有没有等同于PHP的htmlspecialchars的函数?我知道自己实现它相当容易,但是使用内置函数,如果有的话,会更好。
对于那些不熟悉PHP的人来说,htmlspecialchars可以将像<htmltag/>
这样的东西翻译成<htmltag/>
。
我知道escape()
和encodeURI()
不是这样工作的。
发布于 2011-01-29 13:48:49
您的解决方案代码有一个问题--它只会在每个特殊字符的第一次出现时转义。例如:
escapeHtml('Kip\'s <b>evil</b> "test" code\'s here');
Actual: Kip's <b>evil</b> "test" code's here
Expected: Kip's <b>evil</b> "test" code's here
下面是正常工作的代码:
function escapeHtml(text) {
return text
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
更新
下面的代码将产生与上面相同的结果,但它的性能更好,特别是在大块文本上(感谢jbo5112)。
function escapeHtml(text) {
var map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}
发布于 2017-01-17 22:01:56
下面是一个转义HTML的函数:
function escapeHtml(str)
{
var map =
{
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
return str.replace(/[&<>"']/g, function(m) {return map[m];});
}
和解码:
function decodeHtml(str)
{
var map =
{
'&': '&',
'<': '<',
'>': '>',
'"': '"',
''': "'"
};
return str.replace(/&|<|>|"|'/g, function(m) {return map[m];});
}
发布于 2010-09-02 19:51:21
对于jQuery,它可以是这样的:
var escapedValue = $('<div/>').text(value).html();
来自相关问题Escaping HTML strings with jQuery
正如注释中提到的,此实现保留了双引号和单引号。这意味着如果您需要将元素属性设置为原始html字符串,则不应使用此解决方案。
https://stackoverflow.com/questions/1787322
复制相似问题