urlencode也分编码而不同

随便拿个汉字"甜甜嘴超"在是UTF-8编码时urlencode后是%u751C%u751C%u5634%u8D85或%E7%94%9C%E7%94%9C%E5%98%B4%E8%B6%85(根据转义语言不同可能不同,反解后结果一样),在GBK编码时urlencode后是%CC%F0%CC%F0%D7%EC%B3%AC 所以要解决将编码后的串反转回去就需要了解之前汉字的正确编码.

先来看个文章http://blog.csdn.net/yc_8301/archive/2008/05/06/2400742.aspx

本文不讲C#,我们只讲讲在PHP环境源代码为GBK时怎么将上面的两个UTF-8的串反解回去.

遇见问题看看手册总有好收获 http://cn.php.net/urldecode 找到如下代码片断

 

XML/HTML代码
  1. I had troubles converting Unicode-encoded data in $_GET (like this: %u05D8%u05D1%u05E2) which is generated by JavaScript's escape() function to UTF8 for server-side processing.   
  2.   
  3. Finally, i've found a simple solution (only 3 lines of code) that does it (at least in my configuration):   
  4.   
  5. <?php  
  6.   function utf8_urldecode($str) {   
  7.     $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));   
  8.     return html_entity_decode($str,null,'UTF-8');;   
  9.   }   
  10. ?>  
  11.   
  12. note that documentation for html_entity_decode() states that "Support for multi-byte character sets was added at PHP 5.0.0" so this might not work for PHP 4   

 

参照上面的代码,程序如下:

 

PHP代码
  1. function utf8_urldecode($str) {   
  2.     $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));   
  3.     return html_entity_decode($str,null,'UTF-8');;   
  4. }   
  5. echo iconv('utf-8','gbk//IGNORE',utf8_urldecode("%u751C%u751C%u5634%u8D85"));   
  6. echo "<hr>";   
  7. echo iconv('utf-8','gbk//IGNORE',utf8_urldecode("%E7%94%9C%E7%94%9C%E5%98%B4%E8%B6%85"));  

 

收工

上一篇: IE6恢复默认设置(IE全套)   下一篇: Xapian vs sphinx ppt

提交疑问

回顶部