12345678910111213141516171819202122232425262728293031323334353637383940 |
- /*
- from http://www.geekhideout.com/urlcode.shtml
- public domain
- */
- #include <ctype.h>
- #include <stdlib.h>
- #include <string.h>
- /* Converts a hex character to its integer value */
- char from_hex(char ch) {
- return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10;
- }
- /* Converts an integer value to its hex character*/
- char to_hex(char code) {
- static char hex[] = "0123456789abcdef";
- return hex[code & 15];
- }
- /* Returns a url-decoded version of str */
- /* IMPORTANT: be sure to free() the returned string after use */
- char *url_decode(char *str) {
- char *pstr = str, *buf = malloc(strlen(str) + 1), *pbuf = buf;
- while (*pstr) {
- if (*pstr == '%') {
- if (pstr[1] && pstr[2]) {
- *pbuf++ = from_hex(pstr[1]) << 4 | from_hex(pstr[2]);
- pstr += 2;
- }
- } else if (*pstr == '+') {
- *pbuf++ = ' ';
- } else {
- *pbuf++ = *pstr;
- }
- pstr++;
- }
- *pbuf = '\0';
- return buf;
- }
|