PHP字符串的编码问题的详细介绍


Posted in PHP onApril 27, 2013
 
    大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,UTF-8编码的中文字符是3字节,GBK为2个字节。
 

    PHP 也自带几种字符串截取函数,其中常用到的就是 substr 和 mb_substr。

    使用substr截取中文字符时会出现乱码,这是因为substr是按字节来截取的。即UTF-8编码的中文,使用substr截取,只会截取1/3个中文,当然出现乱码了。

    mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )  中的参数$encoding可以指定编码,如果省略,则使用内部字符编码。

  

     如果不清楚字符串的编码格式的话,可以用mb_detect_encoding检查:

    $encoding  = mb_detect_encoding($string, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′)); 

     然后:

     mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

    如果自己实现mb_substr,效率并不是很好。

编码相关的php函数使用

ord(substr($str, $i, 1)) > 0xa0)

ord($string)返回字符串第一个字符的ASC码,通过这个来判断截取的字符串第一个字符是不是汉字,因为例如gb2312编码的一个文字是2字节,utf8为三个字节。即  编码大于256的就是汉字。

正则字符:

匹配汉字 :   preg_match_all('/[\x80-\xff]?./', $string, $match);  

匹配英文: preg_match_all("/[/x01-/x7f]+/", $string, $match);  


编码转换

iconv ( string $in_charset , string $out_charset , string $str )

 如GB2312  转UTF-8:  iconv("GB2312","UTF-8",$text)

url 编码urlencode

编码后返回的字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。

不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。

URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode,另一种是基于UTF-8的Encode。 如:
$url = '中国';  
echo urlencode($url );  
//UTF-8: %E4%B8%AD%E5%9B%BD  
//GB2312:%D6%D0%B9%FA 

例如我们使用浏览器打开百度,搜索 “中国”.    在地址栏看到:
http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=16&rsv_sug=0&rsv_sug4=302&rsv_sug1=11&inputT=22928

即我们看到“中国”被浏览器自动转换为:%E4%B8%AD%E5%9B%BD。


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

url解码urldecode 和 rawurldecode
1、在解码时,可以使用相应的 urldecode() 和 rawurldecode(),相应地,rawurldecode() 不会把加号('+')解码为空格,而 urldecode() 可以。
2、urldecode() 和 rawurldecode() 解码出的字符串是 UTF-8格式的编码,如果URL中含有非UTF-8 编码的中文,则要把解码出的字符串进行转换。
如下,先把php文件设置为gb2312编码。你会看到一部分是乱码,一部分是正常的。
$url = '中国';
echo $a = urldecode(urlencode($url)) ,' ';
echo iconv('gb2312', 'utf-8', $a);
�й� 中国

PHP 相关文章推荐
开发大型 PHP 项目的方法
Jan 02 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
PHP异步调用socket实现代码
Jan 12 PHP
解析将多维数组转换为支持curl提交的一维数组格式
Jul 08 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
Codeigniter整合Tank Auth权限类库详解
Jun 12 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
php对文件进行hash运算的方法
Apr 03 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 PHP
php正则表达式使用的详细介绍
Apr 27 #PHP
基于PHP编程注意事项的小结
Apr 27 #PHP
php二维数组排序与默认自然排序的方法介绍
Apr 27 #PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 #PHP
php 模拟get_headers函数的代码示例
Apr 27 #PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 #PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 #PHP
You might like
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
详解thinkphp中的volist标签
2018/01/15 PHP
php新建文件的方法实例
2019/09/26 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
Python正则表达式知识汇总
2017/09/22 Python
python模块导入的细节详解
2018/12/10 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
python+pyqt5编写md5生成器
2019/03/18 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
python excel和yaml文件的读取封装
2021/01/12 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
深圳茁壮笔试题
2015/05/28 面试题
十佳护士获奖感言
2014/02/18 职场文书
2014年班主任自我评价范文
2014/04/23 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
2015年教师新年寄语
2014/12/08 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
家电创业计划书
2019/08/05 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript