PHP URL传递中文乱码问题解决办法

在使用 ?id=”中文” 传递中文参数时,出现了乱码,这是经过了二次转码后的结果,其中,在 php 中,url 中是不可以直接传输中文的,对于这点,一直心存不满,没办法呀,谁让咱没一套解决方案呢,不知道别的语言是不是也出现这样的问题。

对于网上所说的在首页添加 header(“content-type:text/html;charset=utf-8″); 这样的代码,以及把数据库页面等等设置成 utf8 的解决方案根本无效,始终传递过来的中文是乱码。

尽管所有04ie.com站点PHP  我都是用的统一的 utf8 编码,但始终传递过去是乱码,后来测试了几个浏览器,发现 360 可以传递过去,而 IE 不行,后来再使用 $msg = iconv(‘gbk’,'utf-8′,$_GET["msg"]); 进行转换,测试几个浏览器后,大多还是显示乱码的问题。

最后总结了一点,对于 GET[] 过去的值,url 中不可以直接传输中文,如果必须要传输的话,用 urlencode() 方法来处理中文。对于 POST[]  不知道怎么样,暂时还没有做过实验。

再来PHP手册上查下urlencode()的使用:urlencode() 本函数将字符串以 URL 编码。例如空格就会变成加号。Homepage 中 form 资料传送就是用 urlencode 编码后再送出

原来如此,我说呢为什么从form表单提交过来的就没有问题,但是url传递过来的就乱码

本工具分别实现两种方式的Encode与Decode:

中文 -> GB2312的Encode -> %D6%D0%CE%C4

中文 -> UTF-8的Encode -> %E4%B8%AD%E6%96%87

Html中的URLEncode:

编码为GB2312的html文件中:/中文.rar -> 浏览器自动转换为 -> /%D6%D0%CE%C4.rar

注意:Firefox对GB2312的Encode的中文URL支持不好,因为它默认是UTF-8编码发送URL的,但是ftp://协议可以,我试过了,我认为这应该算是Firefox一个bug。

编码为UTF-8的html文件中:/中文.rar -> 浏览器自动转换为 -> /%E4%B8%AD%E6%96%87.rar

PHP中的URLEncode:

  1. <?php  
  2. //GB2312的Encode  
  3. echo urlencode("中文-_. ")."n"//%D6%D0%CE%C4-_.+  
  4. echo urldecode("%D6%D0%CE%C4-_. ")."n"//中文-_.  
  5. echo rawurlencode("中文-_. ")."n"//%D6%D0%CE%C4-_.%20  
  6. echo rawurldecode("%D6%D0%CE%C4-_. ")."n"//中文-_.  
  7. ?> 

除了“-_.”之外的所有非字母数字字符都将被替换成百分号“%”后跟两位十六进制数。

urlencode和rawurlencode的区别:urlencode将空格编码为加号“+”,rawurlencode将空格编码为加号“%20”。

如果要使用UTF-8的Encode,有两种方法:

一、将文件存为UTF-8文件,直接使用urlencode、rawurlencode即可。

二、使用mb_convert_encoding函数:

  1. <?php  
  2. $url = '/中文.rar';  
  3. echo urlencode(mb_convert_encoding($url'utf-8''gb2312'))."n";  
  4. echo rawurlencode(mb_convert_encoding($url'utf-8''gb2312'))."n";  
  5. //http%3A%2F%2Fs.%2F%E4%B8%AD%E6%96%87.rar  
  6. ?> 

实例代码如下:

  1. <?php  
  2. function parseurl($url="")  
  3. {  
  4. $url = rawurlencode(mb_convert_encoding($url'gb2312''utf-8'));  
  5. $a = array("%3A""%2F""%40");  
  6. $b = array(":""/""@");  
  7. $url = str_replace($a$b$url);  
  8. return $url;  
  9. }  
  10. $url="ftp://ud03:password@s./中文/中文.rar";  
  11. echo parseurl($url);  
  12. //ftp://ud03:password@s./%D6%D0%CE%C4/%D6%D0%CE%C4.rar  
  13. ?> 
JavaScript中的URLEncode:

如:%E4%B8%AD%E6%96%87-_.%20%E4%B8%AD%E6%96%87-_.%20

encodeURI不对下列字符进行编码:“:”、“/”、“;”、“?”、“@”等特殊字符。
如:/%E4%B8%AD%E6%96%87.rarhttp%3A%2F%2Fs.%2F%E4%B8%AD%E6%96%87.rar

看来也只有用 urlencode() 方法来处理中文了,在传递之前要先进行编码,传递过去之后再进行解决就可以了,那么利用如下两个函数:编码:”.urlencode(‘中文’).”,解码:”.urldecode(‘中文’).”,括号里的中文就是传递的字符了。

如下:传递页面先进行04ie.com编码:td.php?id=”.urlencode(‘中文’).”,接受页面进行解码即可:urldecode(id).”,附一个函数:

  1. if (preg_match("/^([".chr(228)."-".chr(233)."]{1} [".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1})+$/",$msg)) //如果$msg是UTF-8编码 
  2. $msg = iconv("UTF-8","GB2312",$msg); //将 $msg 由UTF-8编码转为GB2312编码 
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » PHP URL传递中文乱码问题解决办法

1 评论

  1. Hi, just required you to know I he added your site to my Google bookmarks due to your layout. But seriously, I believe your internet site has 1 in the freshest theme I??ve came across.Metropol Halı Karaca Halı Öztekin ve Selçuklu Halı Cami Halısı ve Cami Halıları Türkiye’nin En Büyük Cami Halısı Fabrikasıyız…

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡