Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在js中替换字符串的最快方法?_Javascript_Jquery_Html Encode - Fatal编程技术网

Javascript 在js中替换字符串的最快方法?

Javascript 在js中替换字符串的最快方法?,javascript,jquery,html-encode,Javascript,Jquery,Html Encode,当我向服务器提交/发布数据时,我需要对其字符(相关字符)进行HTMLencode编码,因为通过设置validationRequest=false来禁用输入检查是一种很好的做法 所有解决方案最终都将替换字符串中的字符: 这是我写的 function htmlEncode(str) { str = str.replace(/\&/g, "&amp;"); str = str.replace(/\</g, "&lt;"); str = str.re

当我向服务器提交/发布数据时,我需要对其字符(相关字符)进行HTMLencode编码,因为通过设置
validationRequest=false来禁用输入检查是一种很好的做法

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

这是我写的

function htmlEncode(str) {
    str = str.replace(/\&/g, "&amp;");
    str = str.replace(/\</g, "&lt;");
    str = str.replace(/\>/g, "&gt;");
    str = str.replace(/ /g, "&nbsp;");
    return str;
}
函数htmlEncode(str){
str=str.replace(/\&/g,“&;”);
str=str.replace(/\/g,“”);
str=str.replace(//g,“”);
返回str;
}
但显然,regex可以被更快的东西取代(别误会,我喜欢regex)

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


最快的方法是什么?

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

function htmlEncode(str) {
    var d = document.createElement('b');
    d.innerText = str;
    return d.innerHTML;
}
这条路不是最快的。此测试表明regExp更快:

然而,您使用的HTML越多,差异似乎越小

innerText方法似乎更可靠,因为它将利用实体的本机浏览器转换表。使用RegExp时,您总是可能会错过一些东西,并且作为某些人,使用RegExp使用HTML并不总是最佳的。

function-htmlEncode(str){
function htmlEncode(str) {
    return String(str)
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
}
返回字符串(str) .更换(/&/g,“&;”) .替换(/“/g,”)) .替换(/'/g'';')) .替换(//g',); }
如果您使用的是最新版本的浏览器,此方法速度很快,并且可能是最快的选项

另一种方法也是这样的

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

function htmlDecode(value){
  return $('<div/>').html(value).text();
}
函数htmlEncode(值){
返回$('').text(value.html();
}
函数htmlDecode(值){
返回$('').html(value.text();
}
函数htmlEncode(值){
如果(值){
返回jQuery(“”).text(value).html();
}否则{
返回“”;
}
}
函数htmlDecode(值){
如果(值){
返回$('').html(value.text();
}否则{
返回“”;
}
}

通过设置validationRequest=false禁用输入检查-这不是一个好做法-绕过拒绝您想要接受的数据的安全过滤器是一个更糟糕的做法。设置安全过滤器以访问您想要接受的内容类型,而不是接受默认设置,以保护不知道自己在做什么的人。(编辑:@ammoQ-heh!)@RoyiNamir-优秀/伟大的程序员不会进行微优化,除非代码分析表明他们需要这样做。他们编写的代码旨在最大限度地提高可维护性。@RoyiNamir-首先在客户端上使用非HTML编码将在客户端上提供最佳性能。这不会处理多空间。这适用于大多数情况,但htmlDecode的此实现将消除任何额外的空白。因此,对于“输入”的某些值,输入!=htmlDecode(htmlEncode(输入))。在某些情况下,这对我们来说是个问题。例如,如果input=“\t Hi\n There

”,则往返编码/解码将产生“Hi There

我认为get text和
trim()
函数将对您有所帮助。或者我的be`.replace(//g)”,我必须用&apos;替换(';)撇号,以避免.net的“潜在危险”“错误。这适用于大多数情况,但htmlDecode的这种实现将消除任何额外的空白。因此,对于“输入”的某些值,输入!=htmlDecode(htmlEncode(输入))。在某些情况下,这对我们来说是个问题。例如,如果input=“\t Hi\n There

”,则往返编码/解码将产生“Hi There

请参阅我对Champ的评论。同样,值得注意的是,此方法返回innerText的浏览器实现,因此\n变为
等。如果需要对每个字符进行显式控制,则RegExp可能更好。
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 '';
    }
}