/*function getPOSTvars*/
char **getPOSTvars(){
int i;
int content_length;
char **postvars;
char *postinput;
char **pairlist;
int paircount=0;
chr *nvpair;
char *eqpos;
postinput=getenv("CONTENT_LENGTH");//获取传送给程序数据的字节数
if(!postinput)
exit();
if(!content_length=atoi(postinput))) //获取信息长度
exit(1);
if(!(postinput=(char*)malloc(content_length+1)))
exit(1);
if(!fread(postinput,content_length,1,stadin))
exit(1);
postinput[content_length]='0';
for(i=0;postinput[i];i++)
if(postinput[i]=='+')
postinput[i]=''; //对加易进行处理
pairlist=(char **)malloc(256*sizeof(char **));
paircount=0;
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;
}
|