7

当我向服务器提交/发布数据时,我需要对其字符(相关字符)进行 HTML 编码,因为通过设置禁用输入检查不是一个validationRequest = false好习惯。

所有解决方案最终都替换了字符串中的字符:

这就是我写的。

function htmlEncode(str) {
    str = str.replace(/\&/g, "&");
    str = str.replace(/\</g, "&lt;");
    str = str.replace(/\>/g, "&gt;");
    str = str.replace(/ /g, "&nbsp;");
    return str;
}

但是显然正则表达式可以用更快的东西代替(不要误会我的意思——我喜欢正则表达式)。

此外,使用索引 + 子字符串似乎很浪费。

最快的方法是什么?

4

3 回答 3

13
function htmlEncode(str) {
    return String(str)
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
}

jsperf 测试表明,如果您使用的是最新的浏览器版本,此方法速度很快,并且可能是最快的选择

另一种方式也喜欢这个

function htmlEncode(value){
  return $('<div/>').text(value).html();
}

function htmlDecode(value){
  return $('<div/>').html(value).text();
}
于 2012-09-24T09:20:13.830 回答
0

如果您只是编码 HTML 实体,您可以尝试:

function htmlEncode(str) {
    var d = document.createElement('b');
    d.innerText = str;
    return d.innerHTML;
}

这种方式并不是最快的。此测试表明 regExp 更快:http: //jsperf.com/encodehtml

但是,您使用的 HTML 越多,差异似乎就越小。

innerText 方法似乎更可靠,因为它将利用实体的本机浏览器转换表。使用 RegExp,您总是有可能遗漏某些内容,并且正如之前的一些答案所表明的那样,使用 RegExp 使用 HTML 并不总是最佳的。

于 2012-09-24T09:19:57.533 回答
0
function htmlEncode(value){
    if (value) {
        return jQuery('<div />').text(value).html();
    } else {
        return '';
    }
}

function htmlDecode(value) {
    if (value) {
        return $('<div />').html(value).text();
    } else {
        return '';
    }
}
于 2012-09-24T09:23:25.503 回答