ASP 3.0高级编程(十六)(5) 另外一种更普遍的情况也会出现麻烦。当把这些值作为QueryString集合的成员传送给服务器时,将被追加到URL的末尾(在一个问号字符之后)。这种情况发生在<FORM>的METHOD属性被设置为“GET”(或者是省略了METHOD属性)的情况。换句话说,对于直接追加到URL上的值,都可能出现麻烦。这可能发生在<A>元素中: <A HREF=http://myserver.com/mypage.asp?title=Instant Jscript>Instant Jscript</A> 一些浏览器(例如Internet EXPlorer)可以对此进行处理,因为它们在把HTTP请求发送到服务器之前,自动地执行必要的转换。然而,许多其他的浏览器不进行这种转换,并导致了URL通常在第一个空格或非法字符处被截断。这样在Navigator中,上面给出的链接要求的网页变为http://myserver.com/mypage.asp?title=Instant。在服务器上,title名字/值对的丢失部分会使代码失败。 考虑到HTTP协议定义的限制,必须从作为HTTP请求中的URL使用的字符串中删除非法的字符(非法字符是所有那些ANSI代码在126之上的字符和ANSI代码在126以下的某些字符)。 ANSI代码大于126的字符必须用百分号后跟十六进制形式的ANSI代码进行替换。这样,版权字符©变成%A9。ANSI代码在126之下在URL中不合法的字符,同样使用相应的替代字符串;如表4-6所示: 表4-6 字符与HTTP/URL代替物的关系 字 符 HTTP/URL代替物 字 符 HTTP/URL代替物 空格 + \ %5C ‘ %27 ] %5D ! %21 ^ %5E # %23 ` %60 $ %24 { %7B % %25 %7C & %26 } %7D ( %28 + %2B ) %29 < %3C / %2F = %3D : %3A > %3E ; %3B Chr(10) 忽略 [[/TD] %5B Chr(13) [TD] %0D 4. Server对象的URLEncode方法 Server对象提供了可以用来把任意字符串转换成相应的合法HTTP URL的方法。可以利用示例网页对这个名为URLEncode的方法进行练习,如图4-29所示: 图4-29 使用URLEncode方法的屏幕 这里,输入的值作为URL是非法的,它包含了空格和ANSI代码大于126的字符。对这个值,使用URLEncode方法的结果是所有的空格被替换成一个加号,版权符号被替换为 %A9,如图4-30所示: 图4-30 使用URLEncode方法的结果 (1) 示例网页代码的功能 在示例网页中,处理这个功能的代码非常简单,仅仅检查是否单击了URLEncode方法对应的按钮,如果单击了,把对应的文本框中的值传递给Server.URLEncode方法并显示结果: If Len(Request.Form(“cmdURLEncode”)) Then strValue = Request.Form(“txtURLEncode”) Response.Write “<B>Results:</B><BR>Server.URLEncode (“ & QUOT & strValue _