当前位置: 代码迷 >> JavaScript >> 在ASP中使用Serverside JS进行URL解码
  详细解决方案

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

热度:84   发布时间:2023-06-12 14:22:12.0

我有一个问题是由于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版本的信息,否则我不知道发生了什么。

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

我是个肥佬吗?

可能是什么问题?

在此先感谢您的帮助。

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