たつやブログ

2009-11-28

C言語でURLエンコード

ApacheモジュールURLエンコードしたかったから書いた。

Apache関数でap_escape_uriってのがあったけど、

?しかエスケープしてくれなくて

ちょっと違うみたい。

char * url_encode(apr_pool_t *p, char* url){
    char *copy = apr_palloc(p, 3 * strlen(url) + 3);
    int i;
    char *pt = url;
    char c;
    char *url_en = copy;

    for(i = 0; i < strlen(pt); i++){
        c = *url;

        if((c >= '0' && c <= '9')
        || (c >= 'A' && c <= 'Z')
        || (c >= 'a' && c <= 'z')
        || (c == '\'')
        || (c == '*')
        || (c == ')')
        || (c == '(')
        || (c == '-')
        || (c == '.')
        || (c == '_')){
            *url_en = c;
            ++url_en;
        }else if(c == ' '){
            *url_en = '+';
            ++url_en;
        }else{
            *url_en = '%';
            ++url_en;

            sprintf(url_en, "%02X", c);
            url_en = url_en + 2;
        }

        ++url;
    }
    
    *url_en = '\0';
    
    return copy;
}

apr_pallocってのはApache関数

メモリ自動管理してくれるらしい。

この関数が終わってもcopyのメモリはちゃんと保持してくれて、

使い終わったら解放してくれるみたい。


動作は保障しません。

今のとこちゃんと動いてる。


〓たつや〓

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hibinotatsuya/20091128/1259404695