荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: pas (流星), 信区: Visual
标  题: 用VB编写标准CGI程序(6)
发信站: 荔园晨风BBS站 (Fri May 11 14:10:09 2001), 转信

  CGI程序从环境变量“QUERY_STRING”或标准输入中读入的数据是经过浏览器
URL译码过的 故在使用这些数据以前还必须对它们进行URL解码。解码的目的是将
数据还原成客户端用户在Web页面上输入时的形式。本文已经介绍了URL译码过程
URL解码过程与它正好相反 它一般包括以下步骤

  1 从浏览器用GET或POST方法所传送来的数据中找出代表各个表单元素所储存
数据的“NAME=VALUE”对。

  2 VALUE属性中所存放的数据若含有“+” 则被转换成空格。

  3 将VALUE属性中所存放的数据的十六进制数“%HH”转换成相应的字符。

  Web系统将汉字当成特殊的字符 对它也要进行URL译码。对于一个特殊的单字
节字符(比如“/”) 浏览器通常将它译码成十六进制数的形式(比如%2F) “
%”表示它后面跟的是两位十六进制数。当VB程序对其进行处理时调用Chr$函数就
可以将其恢复为原貌。而一个汉字则被浏览器译码成四位十六进制数(比如
%D5%C5)。如果CGI程序还像以前那样分别调用Chr(D5)和Chr(C5) 则由于D5 C5
都不是正常的单字节十六进制数码 故Chr函数返回空 汉字将无法正确还原。正
确的做法应该是将有关汉字的四位十六进制数一起传给函数Chr(如Chr(D5C5))
此时汉字才能被正确还原。

  因此 可以让CGI程序对四位连续的十六进制数一起进行译码 以便使汉字能
够被正确还原。但在这种情况下 当客户端用户输入了两个连续的Web系统保留字
符时 CGI程序又可能把它们当成汉字来处理。这时可以让CGI程序在 要对四位连
续的十六进制数进行译码时首先检查前面两位是否为Web系统的保留字符 如果是
则仍然按照单字节的字符处理。不过如果客户端用户在表单内填写了很多汉字 则
CGI程序的负担将会大大加重。事实上 在大多数情况下 客户端用户很少会使用
两个连续的Web系统的保留字符 所以可以只让CGI程序对最容易出现的情形如“:
//”(当客户端用户在表单中输入某一URL时会出现这种情况)进行检查 本文下
节提供的函数UrlDecode( )可以实现对汉字和Web系统保留字符的URL解码。


--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.52.78]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店