用 C 語言將 CGI 的 post 的參數解碼

CGI 程式設計

第一個程式

環境變數

get 參數

post 參數

常用函數

參數解碼

範例:檔案編輯

Apache 安裝

訊息

相關網站

參考文獻

最新修改

簡體版

English

程式一:cgipost_unescape.c

#include <stdio.h>
#include <stdlib.h>

void replace(char *str, char cFrom, char cTo) {
    int x;
    for(x=0;str[x];x++) 
      if(str[x] == cFrom) 
        str[x] = cTo;
}

char x2c(char *what) {
    register char digit;
    digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0'));
    digit *= 16;
    digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0'));
    return(digit);
}

void unescape_url(char *url) {
    register int x,y;
    for(x=0,y=0;url[y];++x,++y) {
        if((url[x] = url[y]) == '%') {
//            url[x] = x2c(&url[y+1]);
            int c;
            sscanf(&url[y+1], "%2X", &c);
            url[x] = c;
            y+=2;
        }
    }
    url[x] = '\0';
    replace(url, '+', ' ');
}

int main(int argc, char* argv[], char *envp[])
{
   printf("Content-type: text/html\n\n");
   int length=atoi(getenv("CONTENT_LENGTH"));
   printf("length=%d\n", length);
   char format[20], post[10000];
   sprintf(format, "%%%dc", length); 
   scanf(format, post);
   printf("post=%s<BR/>", post);
   unescape_url(post);
   printf("post=%s<BR/>", post);
}

HTML 網頁

<html>
<body>
<form action="/cgi-bin/post.cgi" method="post">
姓名:<input type="text" name="name"><BR/>
EMAIL:<input type="text" name="email"><BR/>
<input type="submit" value="送出">
</form>
</body>
</html>

編譯

D:\ccc\cgi>gcc cgipost_unescape.c -o post.cgi

然後將 post.cgi 複制到 apache 的 cgi-bin 目錄下。

執行結果

formpostChinese.png

圖一、網頁的輸入

cgipostChinese.png

圖二、程式一的輸出畫面

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License