第二:格式化UTL的数据
还有另外一种情况,就是经常需要把一个文本字符串变换成能够在Web网页中使用的另外一种格式。现代Web服务器和操作系统都十分友好地支持包含空格字符的文件名,但是我们所使用的URL可能包含有空格字符,由于HTTP使用的URL语法不允许有空格字符(和几个其他字符),可能会出现麻烦。
另外一种更普遍的情况也会出现麻烦。当把这些值作为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 字符与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) :忽略
] :%5B
Chr(13) :%0D
Server对象提供了可以用来把任意字符串转换成相应的合法HTTP URL的方法。
If Len(Request.Form(“cmdURLEncode”)) Then
strvalue = Request.Form(“txtURLEncode”)
Response.Write “<B>Results:</B><BR>Server.URLEncode (“ & QUOT & strvalue _
& QUOT & “) returned <B>” & QUOT & Server.URLEncode(strvalue) _
& QUOT & “</B><HR>”
End If
对HTML元素和其他链接使用URLEncode
URLEncode方法更普遍地用于把<A>元素或其他链接的值写到ASP网页。例如,如果在查询字符串中建立了一系列的链接,这;些链接包含来自一个数据库的值,首先应该对这个字符串使用Server.URLEncode方法:
<%
strvalue = Request.Form(“txtSomevalue”)
‘Create the full URL for the link as an HTTP-legal string
strURL = http://myeassy.com/books.asp?title= & Server.URLEncode(“strvalue”)
‘Make sure we don’t have any non-legal HTML characters in the page text
strLink = Server.HTMLEncode(“strvalue”)
%>
…
<A HREF=”<% = strURL %>”><% = strvalue %></A>
…
如果放入字符串strvalue的值包含标题“Active Server Pages©”,将得到由这个代码段创建的如下所示的HTML:
<A HREF=http://mysite.com/books.asp?title=Active+Server+Pages%A9>
Active Server Pages©</A>
注意,我们不仅仅使用Server.URLEncode方法来建立一个合法的URL字符串,而且还对链接的文本使用了Server.HTMLEncode方法,以确保把所有非法的字符转换为合适的HTML等价实体。
和HTMLEncode方法一样,不用反译码ASP网页中的URL编码值。IIS自动地实现URL编码字符串的转换,该字符串在HTTP请求中转换为它们原先格式,使得它们在内置对象中是可用的。