|
|
|
|
你现在的位置:您现在的位置是: 中国ASP>>ASP教程>>ASP对象 |
|
| Server对象:数据格式化 |
|
第一:格式化html数据
这里首先涉及的是在一个HTML网页中如何显示HTML代码的方法。 字符与等价的HTML实体的关系 < :& > :" 如果我们在输出流中直接使用< >这些标签是无法在浏览器上明文显示的。 等等~~ 我们在需要的时候,必须对他们进行转换。即Server对象的HTMLEncode方法。
Response.Write “Server.HTMLEncode ("& QUOT & strvalue & QUOT & ") returned" … 现在所能做的就是把HTMLEncode方法应用于正在输出的值上: … strResult = Server.HTMLEncode(strvalue) Response.Write "Server.HTMLEncode (" & QUOT & strResult & QUOT & ") returned"
从HTMLEncode方法本身考虑: This is <B>"bold"</B> text 上面的语句在HTML网页中得不到同样的显示结果,这是因为HTML字符实体将被浏览器处理和执行,并显示为实体所替代的字符。换句话说,得到的是: This is <B>”bold”</B> text 我们没有看到实体。为了避免这种情况,可两次使用Server.HTMLEncode方法。这就把“&”号变换为“&”,这样就得到了所需的显示结果。示例网页的这个部分的代码是: If Len(Request.Form(“cmdHTMLEncode”)) Then strvalue = Request.Form(“txtHTMLEncode”) ‘Get the value from the text box strResult = Server.HTMLEncode(strvalue) ‘HTMLEncode to convert <,> and “ strDisplay = Server.HTMLEncode(strResult) ‘Then again to convert & to & Response.Write “<B>Results:</B><BR>Server.HTMLEncode (“ & QUOT & strResult _ & QUOT & “) returned <B>” & QUOT & strDisplay & QUOT _ & “</B><HR>” End If
HTMLEncode与HTML控件的缺省值 从上面可以看出,如果在一个HTML网页中要显示HTML代码,而又不使之被作为HTML进行处理和执行,HTMLEncode方法是非常有用的。在大多数普通的ASP网页中不大可能会遇到这种情况,除非使用包含有HTML的数据库或其他数据源中的数据,而又需要作为文本进行显示。 但是HTMLEncode方法真正有用的地方是,通过设置value属性预设页面中文本类型的HTML控件的值。作为例子,可看一下已经用于练习HTMLEncode方法的示例网页的源程序。创建HTMLEncode对应的文本框的HTML在HTML页中定义如下: … <INPUT TYPE=”TEXT” NAME=”txtHTMLEncode” SIZE=”35” value=”This is <B>"bold"</B> text”> … 这是“手工编码”而不是使用Server.HTMLEncode方法。这里也只关心对双引号进行编码而不关心对尖括号的编码。为什么?这是因为如果没有这样做,该代码将被读为: value=”This is <B>”bold”</B> text” 而在这种情况中尖括号不会带来问题,未编码的双引号则会。在文本框中替换的实际值将是“This is <B>”,即它将在第二个双引号字符处被截断。所以,在创建预置控件值的页面时,应该考虑使用HTMLEncode方法,以避免这些值被截断: <% strvalue = Request.Form(“txtSomevalue”) %> … <INPUT TYPE=”TEXT” NAME=”txtSomevalue” value=”<% = ServerEncode(“strvalue”) %>”> … 当浏览器发送已经被HTML编码的一个控件的值给服务器时,自动进行反向译码。即服务器使用Request集合中原来格式的数据。
第二: 格式化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://mysite.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请求中转换为它们原先格式,使得它们在内置对象中是可用的。
|
|
|