嵌入式Linux系统CGI程序设计技术
nvpair=strtok(postinput,"&");//从出现“&”字符的位置把信息分段,然后对结果依次处理
while (nvpair){
pairlist[paircount++]=strdup(nvpair);
if(!(paircount%256))
pairlist=(char**)realloc(pairlist,(paircount+256)*sizeof(char**));
nvpair=strtok(NULL,"&");
}
pairlist[paircount]=0;
postvars=(char**)malloc((paircount*2+1)*sizeof(char **));
for(i=0;i<paircount;i++){
if(eqpos=strchr(pairlist[i],'=')){
*eqpos='0';
unescape_url(postvars[i*2+1]=strdup(eqpos+1));//调用unescape_url函数继续解码
}else{
unescape_url(postvars[i*2+1])=strdup(""));
}
postvars[paircount*2]=0;
for(i=0;pairlist[i];i++)
free(pairlist[i]);
free(pairlist);
free(postinput);
return postvars;
}
其中,unescape_url函数再调用x2c函数,把(不是字节或数字的)特殊字符从其%HH表示方式解码为文本字符。
/*unescape_url function*/
static void unescape_url(char *url){
int x,y;
for(x=0,y=0;url[y];++x,++y){
if((url[x]=url[y])=='%'){
url[x]=x2c(&url[y+1]);
y+=2;
}
}
url[x]='0';
}
(3)直接URL加参数传递方法
这是一种不使用表单就可以向CGI传送信息的方法。它把信息直接追加在URL地址后面,信息和URL之间用号号(?)来分隔。例如,对于一个cgi_gpio.cgi的脚本,可以
《嵌入式Linux系统CGI程序设计技术(第4页)》