打印本文 打印本文  关闭窗口 关闭窗口  
校园网中CGI环境的建立和应用
作者:傅叔平  文章来源:成都教育学院  点击数  更新时间:2006/7/2 11:41:14  文章录入:admin  责任编辑:admin

六     URL解码

  CGI程序必须从表单提交的URL解出各个变量的名和变量的值,才谈得上进一步对这些数据进行处理。现在给出一个解码的实例。用Perl写的解码程序代码如下:

$string=$ENV{’QUERY_STRING’};
@temp = split(/&/,$string); 
@temp1 = split(/=/,@temp[0]); @temp2 = split(/=/,@temp[1]);
$name = @temp1[1]; $email=@temp2[1];
$cname = ToChnString($name);

  现在以前面的例子中提交的如下URL为例来说明该程序代码:
http://cdce/cgi_perl/baoming.pl?name=%B8%B5%CA%E5%C6%BD&email=fsp@263.net
  我们的任务是将用户提交的姓名“傅叔平”和E-mail地址“fsp@263.net”从上述URL中分离出来。
  上面程序中的第一行是通过环境变量QUERY_STRING将 “?”后的字符串分离出来并存到变量$string中。此时$string的值是”name=%B8%B5%CA%E5%C6%BD&email=fsp@263.net”
  第二行是从$string中分离出“&”隔开的两个字符串。此时@temp的值是(”name=%B8%B5%CA%E5%C6%BD”,”email=fsp@263.net”);
  第三行的两个语句从@temp中的两个字符串中分离出“=”隔开的字符串。此时@temp1的值是(”name”,”%B8%B5%CA%E5%C6%BD”);@temp2的值是(” email ”,”fsp@263.net”);
  第四行的两个语句分别将temp1和temp2中的第二个字符串存到变量$name和$email中,此时$name的值为”%B8%B5%CA%E5%C6%BD”,$email的值为”fsp@263.net”。
  现在,用户从HTML表单提交的姓名和E-mail地址都得到了。但是,显然还有一个问题需要解决,那就是汉字信息还是十六进制代码的形式。为此,作者专门编写了一个汉字解码函数ToChnString来解决这个问题。在上面程序的最后一行,只需调用该函数即可将$name中的”%B8%B5%CA%E5%C6%BD”转换成汉字“傅叔平”。
  下面就是汉字解码函数ToChnString的代码:
sub ToChnString
{
   my($i)=0;
   my($chnstring)="";
   my($code0)=0; my($code1)=0;
   my($string)=@_;
   for($i=0;$i<length($string);)
   {
       if(substr($string,$i,1) eq ’%’)
       {
          $temp=(substr($string,$i+1,1).substr($string,$i+2,1));
          $chnstring.=chr(hex($temp));
          $i+=3;
       }
       else
       {
          $chnstring.=substr($string,$i,1);
          $i++;
       }
    }
    return($chnstring);
}
  该函数的算法是:扫描源串,如果遇到百分符“%”就将其后的两个字节转换为汉字并连接到变量chnstring中,否则认为是非汉字字符,不变,照原样连接到变量chnstring中。最后返回chnstring的值。
  该函数没有处理其它用百分符“%”和十六进制编码表示的“=”、“&”、“%”等特殊的字符。因为在表单中提交的汉字串中这几个特殊字符用得极少,此处就简化了。如果表单中要提交这些字符,读者可对ToChnString函数进行修改,只要判断百分符后面是否是这几个字符的ASCII码就可与汉字分开处理了。(XMW)

七     返回信息到客户端

  在网络的交互性中,CGI程序还有一个基本的任务,就是要向客户端返回表单提交后的处理结果等信息。这些信息要显示到客户端屏幕上的浏览器窗口中。我们可以在CGI程序中通过标准输出手段按HTML的规范输出信息,即可达到在客户端的浏览器窗口中显示信息的目的。下面举一个简单的Perl程序例子,该例在客户端的浏览器窗口中显示“祝贺你,你已报名成功!”的信息:
#! e:\perl\bin\
print"Content-type:text/html\n\n";
print”<html>”;
print”<head>”;
print"<title>报名结果</title>";
print”</head>”;
print”<body>”;
print"<br><br>祝贺你,你已报名成功!<br>";
print"</body>";
print”</html>”;
  上面程序在服务器端执行,它相当于在客户端执行了如下HTML代码:
<html>
<head>
<title>报名结果</title>
</head>
<body>
<br><br>祝贺你,你已报名成功!<br>
</body>
</html>
  注意上述Perl程序的前两行:
  第一行:
    #! e:\perl\bin\
  注明以下的行是一个Perl程序而不是shell程序。一般都要将这行作为Perl源程序的第一行,同时也告之了Perl的可执行文件所在的目录。(XMW)

  第二行:
    print"Content-type:text/html\n\n";
  CGI程序产生的输出由两部分组成:MIME头信息和实际的信息。两部分之间以一个空行分开。MIME头信息"Content-type:text/html\n\n"表示输出HTML源代码给Web服务器。请注意任何MIME头信息后必须有一个空行(所以这一个语句末用了两个换行符)。一旦发送这个MIME头信息给Web服务器后,Web浏览器将认为随后的文本输出是HTML源代码。(XMW)

  用此方法产生的HTML源代码中可以使用任何HTML结构,如超级链接、图像、表单等等。也就是说,我们可以在CGI程序中动态地产生HTML源代码输出,这样就很容易实现服务器端的CGI程序与客户端的用户的交互性。  

上一页  [1] [2] [3] [4] [5]  下一页

打印本文 打印本文  关闭窗口 关闭窗口