Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 用C语言实现URL解密(urldecode)

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