显然,这比我想象的要难找。它甚至是如此简单……
JavaScript中是否内置了与PHP的htmlspecialchars相同的函数?我知道自己实现它相当容易,但如果可用的话,使用内置函数会更好。
对于那些不熟悉PHP的人,htmlspecialchars将<htmltag/>转换为<htmltag/>
我知道escape()和encodeURI()不是这样工作的。
显然,这比我想象的要难找。它甚至是如此简单……
JavaScript中是否内置了与PHP的htmlspecialchars相同的函数?我知道自己实现它相当容易,但如果可用的话,使用内置函数会更好。
对于那些不熟悉PHP的人,htmlspecialchars将<htmltag/>转换为<htmltag/>
我知道escape()和encodeURI()不是这样工作的。
当前回答
我正在详细说明一下ok。的答案。
为此,您可以使用浏览器的DOM函数。
var utils = {
dummy: document.createElement('div'),
escapeHTML: function(s) {
this.dummy.textContent = s
return this.dummy.innerHTML
}
}
utils.escapeHTML('<escapeThis>&')
这返回<escapeThis>&
它使用标准函数createElement创建一个不可见的元素,然后使用函数textContent将任何字符串设置为其内容,然后使用innerHTML获取其HTML表示形式中的内容。
其他回答
这就是HTML编码。没有原生javascript函数可以做到这一点,但你可以谷歌,并做一些漂亮的。
例如,http://sanzon.wordpress.com/2008/05/01/neat-little-html-encoding-trick-in-javascript/
编辑: 以下是我的测试结果:
var div = document.createElement('div');
var text = document.createTextNode('<htmltag/>');
div.appendChild(text);
console.log(div.innerHTML);
输出:< htmltag / >
我希望这能赢得比赛,因为它的性能和最重要的不是使用.replace('&','&').replace('<','<')的链式逻辑…
var mapObj = {
'&': "&",
'<': "<",
'>': ">",
'"': """,
'\'': "'"
};
var re = new RegExp(Object.keys(mapObj).join("|"), "gi");
function escapeHtml(str)
{
return str.replace(re, function(matched)
{
return mapObj[matched.toLowerCase()];
});
}
console.log('<script type="text/javascript">alert('Hello World');</script>');
console.log(escapeHtml('<script type="text/javascript">alert('Hello World');</script>'));
反一:
function decodeHtml(text) {
return text
.replace(/&/g, '&')
.replace(/</ , '<')
.replace(/>/, '>')
.replace(/"/g,'"')
.replace(/'/g,"'");
}
js提供了一个函数:
_.escape(string)
转义插入HTML中的字符串,替换&、<、>、"和'字符。
http://underscorejs.org/#escape
它不是内置的JavaScript函数,但如果您已经在使用Underscore.js,如果要转换的字符串不是太大,那么它是比编写自己的函数更好的选择。
function htmlEscape(str){
return str.replace(/[&<>'"]/g,x=>'&#'+x.charCodeAt(0)+';')
}
该解决方案使用字符的数字代码,例如<被<取代。
虽然它的性能略差于使用映射的解决方案,但它具有以下优点:
不依赖于库或DOM 非常容易记住(你不需要记住5个HTML转义字符) 少的代码 相当快(仍然比5个链式替换快)