Zao’s Blog
感谢上天,我不是一个人在战斗!
炒股开户,证券网上开户,不限资金佣金万1.5包含规费,量大手续费万1.3,QQ 312011170
十月
2

网页编码格式与urlencode

标签: | 浏览:(0)

我们中文用户接触的网页编码格式一般是utf-8和gb2312两种,如果网页中没有非常特殊的字符,一般用gb2312就好了,相对于utf-8格式,gb2312占用的空间相对要小一些。因为gb2312是用两个字符代表一个汉字,而utf-8则用三个字符。

当你需要在utf-8编码的网页和gb2312编码的网页之间传递数据时,需要转换为相应的编码。今天我在用php做网页时就遇到了这个问题,如果不转换编码就直接传递的话,接收方显示的是乱码……估计传递字母、数字数据的时候是可以的吧,但中文绝对不行。这时,我们需要用到mb_convert_encoding函数。

该函数要在PHP4.0.6以上才有,官方说明

string mb_convert_encoding ( string $str, string $to_encoding [, mixed $from_encoding] )

mb_convert_encoding() converts character encoding of string str from from_encoding to to_encoding.
str : String to be converted.

例如:

mb_convert_encoding("你好", "utf-8", "gb2312"); //将“你好”从gb2312转换成utf-8

当url中有中文字符时,往往要使用url编码解码函数:urlencode()、urldecode()和rawurlencode()、rawurldecode()。后面两个是按照 RFC 1738 编码方式对 URL 进行编码解码。其实我觉得前面两个与后面两个函数的主要区别是对空格的处理方式不同,前者将空格编码为“+”,后者则编码为“%20”。

这里要注意了,用“+”代替空格有时在php中会有意想不到的后果,此时用“%20”代替空格则问题迎刃而解。比如当使用file_get_contents()获取目标网页内容时,如果url中有空格,用urlencode()进行编码有时会打不开目标页面,而改用rawurlencode()则能成功打开。

我们把网页编码转换函数mb_convert_encoding和url编码解码函数结合,就能在不同编码的网页之间轻松传递数据了。比如

  1. <?php
  2. ...
  3. $url  = rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'));//将网址用目标网页编码utf-8转换
  4. $contents = file_get_contents($url);//获取内容
  5. $contents = mb_convert_encoding($contents, 'gb2312', 'utf-8');//将内容转换为当前网页编码gb2312
  6. ...
  7. ?>

2 条评论 | 发表你的评论

php5用iconv()效率更高,前提是字符串长度不能过大

听说这个函数有bug的:
如果一段UTF-8字串中有中文的中园点:・
用iconv函数转为GB2312,只能得到・点以前的字串,后面的丢失……

发表评论





改变评论框高度:增大(+) | 减小(-)

DO NOT Fill!