您的位置:首页 >> Web开发 >> CGI技术 >> 正文
CGI技术 RSS
 

用C语言技术进行CGI程序设计

http://www.rdxx.com 07年12月12日 00:00 我要投稿

关键词: 程序设计 , C语言 , CGI , 技术 , 程序 , 设计 , 语言

  CONTENT-LENGTH:传递给CGI程序的数据字符数(字节数)。

  在C语言程序中,要访向环境变量,可使用getenv()库函数。例如

  :

  name1=value1&name2=value2&name3=value3&name4=value4&...

  其中名字是Form中定义的INPUT、SELECT或TEXTAREA等标置(Tag)名字,值是用户输入或选择的标置值。这种格式即为URL编码,程序中需要对其进行分析和解码。要分析这种数据流,CGI程序必须首先将数据流分解成一组组的名字/值对。这可以通过在输入流中查找下面的两个字符来完成。

  每当找到字符=,标志着一个Form变量名字的结束;每当找到字符& ,标志着一个Form变量值的结束。请注意输入数据的最后一个变量的值不以&结束。一旦名字/值对分解后,还必须将输入中的一些特殊字符转换成相应的ASCII字符。这些特殊字符是:

  +:将+转换成空格符;

  %xx:用其十六进制ASCII码值表示的特殊字符。根据值xx将其转换成相应的ASCII字符。

  对Form变量名和变量值都要进行这种转换。下面是一个对Form数据进行分析并将结果回送给Web服务器的CGI程序。

#include
#include
#include
int htoi(char *);
main()
{
 int i,n;
char c;
printf (″Contenttype: text/plain
″);
n=0;
if (getenv(″CONTENT-LENGTH″))
 n=atoi(getenv(″CONTENT-LENGTH″));
for (i=0; i
 int is-eq=0;
c=getchar();
switch (c){
 case ′&′:
c=′
′;
break;
 case ′+′:
c=′ ′;
break;
 case ′%′:{
char s[3];
s[0]=getchar();
s[1]=getchar();
s[2]=0;
c=htoi(s);
i+=2;
 }
 break;
case ′=′:
 c=′:′;
 is-eq=1;
 break;
};
putchar(c);
if (is-eq) putchar(′ ′);
}
putchar (′
′);
fflush(stdout);
}
/* convert hex string to int */
int htoi(char *s)
{
 char *digits=″0123456789ABCDEF″;
if (islower (s[0])) s[0]=toupper(s[0]);
if (islower (s[1])) s[1]=toupper(s[1]);
return 16 * (strchr(digits, s[0]) -strchr (digits,′0′)
)
+(strchr(digits,s[1])-strchr(digits,′0′));
}


9 7 3 1 2 3 4 4 8 :


 
 
标签: 程序设计 , C语言 , CGI , 技术 , 程序 , 设计 , 语言 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站