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のメモリはちゃんと保持してくれて、
使い終わったら解放してくれるみたい。
動作は保障しません。
今のとこちゃんと動いてる。
〓たつや〓