www.pudn.com > fanccMSNr.src.rar > urldecode.cpp


// this source code is taken from http://www.gozer.org/c/c/urldecode.c 
// 
#include  
#include  
#include  
#include  
 
int php_url_decode(char *, int); 
static int php_htoi(char *); 
 
int php_url_decode(char *str, int len) { 
	char *dest = str; 
	char *data = str; 
 
	while (len--) { 
		if (*data == '+') { 
			*dest = ' '; 
		} else if (*data == '%' && len >= 2 && isxdigit((int) *(data + 1)) && isxdigit((int) *(data + 2))) { 
			*dest = (char) php_htoi(data + 1); 
			data += 2; 
			len -= 2; 
		} else { 
			*dest = *data; 
		} 
 
		data++; 
		dest++; 
	} 
 
	*dest = '\0'; 
 
	return (dest - str); 
} 
 
static int php_htoi(char *s) {        
	int value; 
	int c; 
	 
	c = s[0]; 
	if (isupper(c)) 
		c = tolower(c); 
 
	value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16; 
 
	c = s[1]; 
 
	if (isupper(c)) 
		c = tolower(c); 
 
	value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10; 
 
	return (value); 
}