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