【声明:转载此信息在于传递更多信息,其内容表达的观点并不代表本站立场,由这些信息所产生的一切后果本站不负任何责任。如果您对本信息有什么意见,欢迎和本站联系,谢谢!】http://CiDu.Net
六 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码就可与汉字分开处理了。//by http://CiDu.Net/
七 返回信息到客户端
在网络的交互性中,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的可执行文件所在的目录。//by http://CiDu.Net/
第二行: print"Content-type:text/html\n\n"; CGI程序产生的输出由两部分组成:MIME头信息和实际的信息。两部分之间以一个空行分开。MIME头信息"Content-type:text/html\n\n"表示输出HTML源代码给Web服务器。请注意任何MIME头信息后必须有一个空行(所以这一个语句末用了两个换行符)。一旦发送这个MIME头信息给Web服务器后,Web浏览器将认为随后的文本输出是HTML源代码。//by http://CiDu.Net/
用此方法产生的HTML源代码中可以使用任何HTML结构,如超级链接、图像、表单等等。也就是说,我们可以在CGI程序中动态地产生HTML源代码输出,这样就很容易实现服务器端的CGI程序与客户端的用户的交互性。
上一页 [1] [2] [3] [4] [5] 下一页
声明:以上信息资料大都是网上搜集而来,版权归作者,如有版权问题请留言告知我将马上改正。 文中所提到的各种观点只是原文观点,各种说法未经一一确认。并不代表本站认可此观点!!
|