返回介绍

15.6.1 CGI 数据的编码

发布于 2024-10-15 23:56:34 字数 2394 浏览 0 评论 0 收藏 0

在这个版本中,我们将收集名字和电子函件地址,并用下述形式将其保存到文件中:

First Last <email@domain.com>;

这对任何 E-mail 程序来说都是一种非常方便的格式。由于只需收集两个字段,而且 CGI 为字段中的编码采用了一种特殊的格式,所以这里没有简便的方法。如果自己动手编制一个原始的 HTML 页,并加入下述代码行,即可正确地理解这一点:

<Form method="GET" ACTION="/cgi-bin/Listmgr2.exe">
<P>Name: <INPUT TYPE = "text" NAME = "name" 
VALUE = "" size = "40"></p>
<P>Email Address: <INPUT TYPE = "text" 
NAME = "email" VALUE = "" size = "40"></p>
<p><input type = "submit" name = "submit" > </p>
</Form>

上述代码创建了两个数据输入字段(区),名为 name 和 email。另外还有一个 submit(提交)按钮,用于收集数据,并将其发给 CGI 程序。Listmgr2.exe 是驻留在特殊程序目录中的一个可执行文件。在我们的 Web 服务器上,该目录一般都叫作“cgi-bin”(注释③)。如果在那个目录里找不到该程序,结果就无法出现。填好这个表单,然后按下提交按钮,即可在浏览器的 URL 地址窗口里看到象下面这样的内容:

http://www.myhome.com/cgi-bin/Listmgr2.exe?name=First+Last&email=email@domain.com&submit=Submit

③:在 Windows32 平台下,可利用与 Microsoft Office 97 或其他产品配套提供的 Microsoft Personal Web Server(微软个人 Web 服务器)进行测试。这是进行试验的最好方法,因为不必正式连入网络,可在本地环境中完成测试(速度也非常快)。如果使用的是不同的平台,或者没有 Office 97 或者 FrontPage 98 那样的产品,可到网上找一个免费的 Web 服务器供自己测试。

当然,上述 URL 实际显示时是不会拆行的。从中可稍微看出如何对数据编码并传给 CGI。至少有一件事情能够肯定——空格是不允许的(因为它通常用于分隔命令行参数)。所有必需的空格都用“+”号替代,每个字段都包含了字段名(具体由 HTML 页决定),后面跟随一个“=”号以及正式的字段数据,最后用一个“&”结束。

到这时,大家也许会对“+”,“=”以及“&”的使用产生疑惑。假如必须在字段里使用这些字符,那么该如何声明呢?例如,我们可能使用“John & MarshaSmith”这个名字,其中的“&”代表“And”。事实上,它会编码成下面这个样子:

John+%26+Marsha+Smith

也就是说,特殊字符会转换成一个“%”,并在后面跟上它的十六进制 ASCII 编码。

幸运的是,Java 有一个工具来帮助我们进行这种编码。这是 URLEncoder 类的一个静态方法,名为 encode()。可用下述程序来试验这个方法:

//: EncodeDemo.java
// Demonstration of URLEncoder.encode()
import java.net.*;

public class EncodeDemo {
  public static void main(String[] args) {
    String s = "";
    for(int i = 0; i < args.length; i++)
      s += args[i] + " ";
    s = URLEncoder.encode(s.trim());
    System.out.println(s);
  }
} ///:~

该程序将获取一些命令行参数,把它们合并成一个由多个词构成的字串,各词之间用空格分隔(最后一个空格用 String.trim() 剔除了)。随后对它们进行编码,并打印出来。

为调用一个 CGI 程序,程序片要做的全部事情就是从自己的字段或其他地方收集数据,将所有数据都编码成正确的 URL 样式,然后汇编到单独一个字串里。每个字段名后面都加上一个“=”符号,紧跟正式数据,再紧跟一个“&”。为构建完整的 CGI 命令,我们将这个字串置于 CGI 程序的 URL 以及一个“?”后。这是调用所有 CGI 程序的标准方法。大家马上就会看到,用一个程序片能够很轻松地完成所有这些编码与合并。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文