我遇到一个问题,原因是IIS关闭+作为查询字符串中的空格。
我们让客户将一些数据作为查询字符串(作业)发布到隐藏页面,他们有时会在其中发布包含C ++等内容的作业 - 因为他们传递的数据我们不能指望他们正确编码它们%2B大部分都是非技术人员,有时他们混合n匹配很有趣。
我们还有一些地方,我们在查询字符串中有查询字符串(有时在将文件名传递到点击链接的flash文件时最多为4,然后重定向网址点击进入记录点击的页面,然后是最后的网址向客户展示!)。
还有其他地方我们在URLS中有URL,例如登录时重定向等等。
加号不应该是一个问题,但我们发现了一些问题,所以我只想要一个可以解决它的功能。
当我们需要对ASP URL进行编码时(由于它们不是Server.URLDecode函数),即使我们大多数时候不需要对页面进行解码,我们使用服务器端JavaScript ASP经典(我知道!)功能,例如
<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函数周围做占位符/替换,所以我想知道问题是什么以及如何解决it.is。
起初我以为是因为我们已经迁移到Windows 2012和IIS 8并且他们有一个新的JS.dll需要安装(从阅读它) - 但是我们仍然在IIS 7上有一些2003服务器我也遇到了同样的问题。
除非我的服务器人员没有告诉我类似我们在2003年使用的IIS版本,否则我不知道发生了什么。
任何人都可以对此有所了解。
我是个笨蛋?
可能是什么问题?
提前感谢您的帮助。
答案 0 :(得分:0)
替换加号的正则表达式为strIN = strIN.replace(/\+/g,"##PLUS##");
因为+
在正则表达式中有意义,所以需要使用反斜杠进行转义。