用C语言实现URL解密(urldecode)
2011 年 12 月 2 日
今天编写了 一个 CGI程序 输入路径名 如 /home/michael/prison.avi
发现 c 语言程序 getenv 接受的数据为 %20%2Fhome%2Fmichael%2Fprison.avi ///// (data=getenv(“QUERY_STRING”);)
这是URL编码之后的数据。
于是用了如下的代码解决了问题:
- void urldecode(char *p)
- {
- register i=0;
- while(*(p+i))
- {
- if ((*p=*(p+i)) == ‘%’)
- {
- *p=*(p+i+1) >= ‘A’ ? ((*(p+i+1) & 0XDF) – ‘A’) + 10 : (*(p+i+1) – ‘0’);
- *p=(*p) * 16;
- *p+=*(p+i+2) >= ‘A’ ? ((*(p+i+2) & 0XDF) – ‘A’) + 10 : (*(p+i+2) – ‘0’);
- i+=2;
- }
- else if (*(p+i)==‘+’)
- {
- *p=‘ ‘;
- }
- p++;
- }
- *p=‘\0’;
- }
看这简简单单的20行代码 我这菜鸟可是花了3个小时才写完的哦这是一个对URL编码进行解密的函数,用C实现的原理非常简单
URL的编码是这样的其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”
<