UrlEncode后的$_GET乱码(PHP解决方案)

作者:暗夜星辰 发布于:2012-9-26 12:00 Wednesday 分类:PHP学习笔记

最近在写代码,遇到一个从$_GET获取中文数据乱码的问题。

很烦人,很烦人,现象描述:url为一个GB2312的回调,参数含有Urlencode后的中文

众所周知GB2312编码的UrlEncode后的数据跟UTF8编码的UrlEncode后的数据是不一样的

例如:

中文 这个词

GB2312的编码为:%D6%D0%CE%C4

UTF8的编码为:%E4%B8%AD%E6%96%87

结果就是我们通过$_GET获取后的数据发生错误,为什么呢?

因为$_GET及$_REGUEST默认都是urldecode后的数据,而这两者解码后的数据并不一致 

参见手册 http://php.net/manual/en/function.urldecode.php

看来 还是得补补课啊……!!!

以下是一个解决方案,来自互联网

header('Content-type: text/html; charset=utf-8');   
   
echo '<br />百度关键词URL编码转换示例:<br />';  

$urlBaidu = 'http://www.baidu.com/s?wd=%D6%D0%CE%C4';  

$arrParse = parse_url($urlBaidu);  

parse_str($arrParse ['query'],$output);  

echo '乱码:' . $output['wd'] . '<br />';   
//将gb2312编码转换成utf-8编码  

$strUTF8 = mb_convert_encoding($output['wd'], 'utf-8', 'gb2312');  

echo '可读码:' . $strUTF8 . '<br />';   

echo '<br />谷歌关键词URL编码转换示例:<br />';  

$urlGoogle = 'http://www.google.cn/search?hl=zh-CN&source=hp&q=%E4%B8%AD%E6%96%87&aq=f&oq=';  
     
$arrParse = parse_url($urlGoogle);  

parse_str($arrParse ['query'],$output);  
//谷歌关键词URL编码是utf-8,不用再作转换  

echo '可读码:' . $output['q'] . '<br />'; 

标签: UrlEncode PHP 乱码

发表评论:

©2012-2014 woodbunny.com 木头♥兔子的小屋 sitemap