使用ASP中的Serverside JS进行URL解码

时间:2015-07-17 12:00:01

标签: javascript asp-classic iis-7.5 url-encoding serverside-javascript

我遇到一个问题,原因是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版本,否则我不知道发生了什么。

任何人都可以对此有所了解。

我是个笨蛋?

可能是什么问题?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

替换加号的正则表达式为strIN = strIN.replace(/\+/g,"##PLUS##");因为+在正则表达式中有意义,所以需要使用反斜杠进行转义。