问题描述
我有一个问题是由于IIS关闭+作为查询字符串中的空格。
我们有客户将一些数据作为查询字符串(作业)发布到隐藏的页面上,有时他们发布的作业中包含诸如C ++之类的东西-由于他们传递数据时,我们不能指望它们正确编码%2B,因为它们大多是非技术人员,有时他们会混合n个匹配项,这很有趣。
我们还在查询字符串中包含查询字符串的地方(将文件名传递到点击链接的Flash文件中时,有时最多为4,然后重定向网址onclick转到记录点击的页面,然后显示最终网址以显示顾客!)。
在URL的其他地方也有URL,例如登录时重定向等。
加号并不是真正的问题,但是我们发现了一些问题,所以我只想一个可以解决问题的函数。
对于有时我们需要对ASP URLS进行编码(由于它们没有Server.URLDecode函数)的时候,尽管我们大多不需要对页面进行未编码,因为我们使用服务器端JavaScript ASP Classic(我知道! )功能,例如
<script language="JavaScript" RUNAT="SERVER">
function URLDecode(strIN)
{
// JS will return undefined for vars that have not been set yet whereas VB doesn't so handle
if(strIN){
var strOUT = decodeURIComponent(strIN);
return strOUT;
}else{ //for undefined or nulls or empty strings just return an empty string
return "";
}
}
</script>
但是我试图通过一个简单的技巧解决+符号的任何可能的问题,我先用一个占位符替换它,然后在解码后将其替换回来,例如
<script language="JavaScript" RUNAT="SERVER">
function URLDecode(strIN)
{
// JS will return undefined for vars that have not been set yet whereas VB doesn't so handle
if(strIN){
strIN = strIN.replace("+","##PLUS##");
var strOUT = decodeURIComponent(strIN);
strOUT = strOUT.replace("##PLUS##","+")
return strOUT;
}else{ //for undefined or nulls or empty strings just return an empty string
return "";
}
}
</script>
但是在运行此时,出现以下错误
Microsoft JScript runtime error '800a01b6'
Object doesn't support this property or method
/jobboard/scripts/VBS/EncodeFuncLib.asp, line 781
这条线是
strIN = strIN.replace("+","##PLUS##");
我试过了
strIN = strIN.replace(/\+/g,"##PLUS##");
strIN = strIN.replace('/\+/','##PLUS##');
但是似乎没有任何作用。
作为客户端JavaScript运行此代码可以正常工作,所以我不知道为什么它不在服务器端运行。
我不想在300个以上的文件中搜索该函数称为服务器端的地方,而不必在URLDecode函数周围进行占位符/替换,所以我想知道问题出在哪里以及如何解决。
起初我以为是因为我们已经迁移到Windows 2012和IIS 8,并且它们需要安装新的JS.dll(通过阅读),但是IIS 7上仍然有一些2003服务器,我也有同样的问题。
除非我的服务器人员没有告诉我类似我们在2003年使用的IIS版本的信息,否则我不知道发生了什么。
任何人都可以对此有所了解。
我是个肥佬吗?
可能是什么问题?
在此先感谢您的帮助。
1楼
替换加号的正则表达式为strIN = strIN.replace(/\\+/g,"##PLUS##");
因为+
在正则表达式中有含义,所以需要用反斜杠将其转义。