| version 1.2, 2003/04/21 23:51:36 |
version 1.3, 2003/04/22 14:22:53 |
|
|
| |
|
| #include <platon/str/strcgi.h> |
#include <platon/str/strcgi.h> |
| |
|
| char * |
#define URLENCODE (0) |
| PLATON_FUNC(urlencode)(str) |
#define RAWURLENCODE (1) |
| |
|
| |
static char * |
| |
PLATON_FUNC(urlencode_core)(str, mode) |
| const char *str; |
const char *str; |
| { |
const int mode; |
| |
{ /* {{{ */ |
| register int i, j, len, tmp_len; |
register int i, j, len, tmp_len; |
| char hex[] = "0123456789ABCDEF"; |
char hex[] = "0123456789ABCDEF"; |
| char *tmp; |
char *tmp; |
| Line 21 PLATON_FUNC(urlencode)(str) |
|
| Line 25 PLATON_FUNC(urlencode)(str) |
|
| |
|
| for (i = 0, j = 0; i < len; i++, j++) { |
for (i = 0, j = 0; i < len; i++, j++) { |
| tmp[j] = (char) str[i]; |
tmp[j] = (char) str[i]; |
| if (tmp[j] == ' ') { |
if (tmp[j] == ' ' && mode & RAWURLENCODE) { |
| tmp[j] = '+'; |
tmp[j] = '+'; |
| } else if (! isalnum(tmp[j]) && strchr("_-.", tmp[j]) == NULL) { |
} else if (! isalnum(tmp[j]) && strchr("_-.", tmp[j]) == NULL) { |
| tmp_len += 3; |
tmp_len += 3; |
| Line 38 PLATON_FUNC(urlencode)(str) |
|
| Line 42 PLATON_FUNC(urlencode)(str) |
|
| |
|
| tmp[j] = '\0'; |
tmp[j] = '\0'; |
| return tmp; |
return tmp; |
| } |
} /* }}} */ |
| |
|
| char * |
static char * |
| PLATON_FUNC(urldecode)(str) |
PLATON_FUNC(urldecode_core)(str, mode) |
| const char *str; |
const char *str; |
| { |
const int mode; |
| |
{ /* {{{ */ |
| register int i, pos, len; |
register int i, pos, len; |
| char *tmp; |
char *tmp; |
| |
|
| Line 92 PLATON_FUNC(urldecode)(str) |
|
| Line 97 PLATON_FUNC(urldecode)(str) |
|
| |
|
| if (str[i] == '%') { |
if (str[i] == '%') { |
| tmp[pos++] = (hextable[(int) str[++i]] << 4) + hextable[(int) str[++i]]; |
tmp[pos++] = (hextable[(int) str[++i]] << 4) + hextable[(int) str[++i]]; |
| } else if (str[i] == '+') { |
} else if (str[i] == '+' && mode & RAWURLENCODE) { |
| tmp[pos++] = ' '; |
tmp[pos++] = ' '; |
| } else { |
} else { |
| tmp[pos++] = str[i]; |
tmp[pos++] = str[i]; |
| Line 100 PLATON_FUNC(urldecode)(str) |
|
| Line 105 PLATON_FUNC(urldecode)(str) |
|
| } |
} |
| tmp[len] = '\0'; |
tmp[len] = '\0'; |
| return tmp; |
return tmp; |
| } |
} /* }}} */ |
| |
|
| |
char * |
| |
PLATON_FUNC(urlencode)(str) |
| |
const char *str; |
| |
{ /* {{{ */ |
| |
return urlencode_core(str, URLENCODE); |
| |
} /* }}} */ |
| |
|
| |
char * |
| |
PLATON_FUNC(urldecode)(str) |
| |
const char *str; |
| |
{ /* {{{ */ |
| |
return urldecode_core(str, URLENCODE); |
| |
} /* }}} */ |
| |
|
| |
char * |
| |
PLATON_FUNC(rawurlencode)(str) |
| |
const char *str; |
| |
{ /* {{{ */ |
| |
return urlencode_core(str, RAWURLENCODE); |
| |
} /* }}} */ |
| |
|
| |
char * |
| |
PLATON_FUNC(rawurldecode)(str) |
| |
const char *str; |
| |
{ /* {{{ */ |
| |
return urldecode_core(str, RAWURLENCODE); |
| |
} /* }}} */ |
| |
|
| char * |
char * |
| PLATON_FUNC(addnslashes)(s, n) |
PLATON_FUNC(addnslashes)(s, n) |
| const char *s; |
const char *s; |
| int n; |
int n; |
| { |
{ /* {{{ */ |
| char *tmp; |
char *tmp; |
| int len, j = 0; |
int len, j = 0; |
| |
|
| Line 133 PLATON_FUNC(addnslashes)(s, n) |
|
| Line 166 PLATON_FUNC(addnslashes)(s, n) |
|
| } |
} |
| tmp[j] = '\0'; |
tmp[j] = '\0'; |
| return tmp; |
return tmp; |
| } |
} /* }}} */ |
| |
|
| char * |
char * |
| PLATON_FUNC(stripnslashes)(s, n) |
PLATON_FUNC(stripnslashes)(s, n) |
| const char *s; |
const char *s; |
| int n; |
int n; |
| { |
{ /* {{{ */ |
| int j = 0; |
int j = 0; |
| char *tmp; |
char *tmp; |
| |
|
| Line 157 PLATON_FUNC(stripnslashes)(s, n) |
|
| Line 190 PLATON_FUNC(stripnslashes)(s, n) |
|
| } |
} |
| tmp[j] = '\0'; |
tmp[j] = '\0'; |
| return tmp; |
return tmp; |
| } |
} /* }}} */ |
| |
|
| #if defined(SELF) || defined(SELFTEST) || defined(SELF_STRCGI) |
#if defined(SELF) || defined(SELFTEST) || defined(SELF_STRCGI) /* {{{ */ |
| |
|
| #include <stdio.h> |
#include <stdio.h> |
| |
|
| #define TEST_urlencode "&bar'foo'&baz[ ]" |
#define TEST_urlencode "&bar'foo'&baz[ ]" |
| #define TEST_urldecode (s1) |
|
| #define TEST_addslashes "The \"string\" wo/backslash (\\)." |
#define TEST_addslashes "The \"string\" wo/backslash (\\)." |
| #define TEST_stripslashes (s1) |
|
| |
|
| int |
int |
| main(argc, argv) |
main(argc, argv) |
| Line 178 main(argc, argv) |
|
| Line 209 main(argc, argv) |
|
| s1 = urlencode(TEST_urlencode); |
s1 = urlencode(TEST_urlencode); |
| printf("urlencode(\"%s\") = \"%s\"\n", TEST_urlencode, s1); |
printf("urlencode(\"%s\") = \"%s\"\n", TEST_urlencode, s1); |
| s2 = urldecode(TEST_urlencode); |
s2 = urldecode(TEST_urlencode); |
| printf("urldecode(\"%s\") = \"%s\"\n", TEST_urldecode, s2); |
printf("urldecode(\"%s\") = \"%s\"\n", s1, s2); |
| |
s1 = rawurlencode(s2); |
| |
printf("rawurlencode(\"%s\") = \"%s\"\n", s2, s1); |
| |
s2 = rawurldecode(s1); |
| |
printf("rawurldecode(\"%s\") = \"%s\"\n", s1, s2); |
| free(s2); |
free(s2); |
| free(s1); |
free(s1); |
| |
|
| s1 = addslashes(TEST_addslashes); |
s1 = addslashes(TEST_addslashes); |
| printf("addslashes(\"%s\") = \"%s\"\n", TEST_addslashes, s1); |
printf("addslashes(\"%s\") = \"%s\"\n", TEST_addslashes, s1); |
| s2 = stripslashes(TEST_stripslashes); |
s2 = stripslashes(s1); |
| printf("stripslashes(\"%s\") = \"%s\"\n", TEST_stripslashes, s2); |
printf("stripslashes(\"%s\") = \"%s\"\n", s1, s2); |
| free(s2); |
free(s2); |
| free(s1); |
free(s1); |
| |
|
| return 0; |
return 0; |
| } |
} |
| |
|
| #endif /* #if defined(SELF) || defined(SELFTEST) || defined(SELF_STRCGI) */ |
#endif /* #if defined(SELF) || defined(SELFTEST) || defined(SELF_STRCGI) */ /* }}} */ |
| |
|
| |
/* Modeline for ViM {{{ |
| |
* vim: set ts=4: |
| |
* vim600: fdm=marker fdl=0 fdc=0: |
| |
* }}} */ |
| |
|