来源:http://it.oyksoft.com/post/387/
要把一个字符串作为URL参数传递给另一个页面,必须要保证传递的字符串是正确的,能够被目标页面正确识别。
但由于URL传递时会造成某些冲突。比如,你要传递的字符串也是一个带有参数的URL,如http://www.oyksoft.com/a.asp?b=1&c=2&d=3,我要把这个URL字符串传递给http://www.oyksoft.com/e.asp,参数为url。如果不作任何处理,那么就是这样:
http://www.oyksoft.com/e.asp?url=http://www.oyksoft.com/a.asp?b=1&c=2&d=3
这样是很混乱的,它肯定会把c和d认为是传参,而url参数为http://www.oyksoft.com/a.asp?b=1
这样理解当然是错误的了。所以我们必须对原字符串进行重新编码。
在ASP和javascript里面,有escape和unescape可以解决问题。
引用
JavaScript中escape函数是对 String 对象编码以便它们能在所有计算机上可读,使用方法:
escape(charString)
charstring是必选项,参数是要编码的任意 String 对象或文字。
escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。字符值大于 255 的以 %uxxxx 格式存储。
注意 escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。
escape(charString)
charstring是必选项,参数是要编码的任意 String 对象或文字。
escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。字符值大于 255 的以 %uxxxx 格式存储。
注意 escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。
在实际的使用过程中,我发现这个函数对一个字符的处理是有可能导致问题的。这就是+。
如果在传递的参数中包含有+,那么用escape转换之后,+仍然是+。但是浏览器在 传递+时会把+看成是空格。unescape之后+也会变成空格。这个设计很奇怪。因此在参数用escape处理之后,我们需要还把+给全部替换成Unicode编码:%2B。
所以,我们可以在ASP中另设一函数:
'url地址转换
Private Function AddTrans(url)
url=escape(url)
url=replace(url,"+","%2B")
AddTrans=url
End Function
Private Function AddTrans(url)
url=escape(url)
url=replace(url,"+","%2B")
AddTrans=url
End Function
这样处理之后,参数中如果包含+字符在unescape之后还是+而不会变成空格。注意上面的函数,是在escape之后再替换+为%2B哦!