php处理多字节字符mbstring及编码转换iconv
来源:互联网 发布:阴阳路抄墓碑 知乎 编辑:程序博客网 时间:2024/05/18 01:27
由于php内部使用单字节形式存储数据。这使得php在处理多字节文字的时候先天欠缺。只要是对数据进行原样处理。不进行计数,截取等。一般问题也不大,不幸的是对中文等多字节字符的截取,计数是一个很常见的问题。为了避免有字符被截取一半的问题。因此引入了php库mbstring(Multibyte String)常用的有以下函数
mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
按编码$encoding将字符串$str进行截取。除了加了一个按编码之外。用法与substr一样。
mb_strlen ( string $str [, string $encoding ] )
按编码$encoding计算字符串$str的字数。除了加了一个编码外。用法与strlen()
mb_detect_encoding ( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false ]] )
检测字符串的编码的格式,$encoding_list是可能的列表,会提高侦测率。$strict指定是否严格模式
mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )
将字符串$str从$from_encoding(省略)转换成$to_encoding
mbstring虽然完美解决了多字节字符处理,但是需要加载额外的扩展。效率也不算高。好在还有php内置的iconv。iconv可以转换几乎所的编码格式。
因此可以用iconv加内置函数对多字节进行处理。我们可以将字符串转换成固定字节的编码集如ucs-2,ucs-4等。然后统计总数后除以固定字节就可以了
如
$str ='使用PHP开发网站';//转换utf-8到固定长度的ucs-2$str = iconv('UTF-8','UCS-2',$str);//计算字符数echo strlen($str)/2;//截取字符echo iconv('UCS-2','UTF-8',substr($str,0,5*2));
mb_convert_encoding与iconv转换编码的区别
1、mb_convert_encoding() 该函数会根据内容自动识别编码,执行效率比iconv差
2、是iconv()在一些字符转换下会不正常,如iconv在转换字符”—”到gb2312
一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数。
- php处理多字节字符mbstring及编码转换iconv
- PHP iconv()字符编码转换的问题
- PHP 中字符编码转换 iconv() 和 mb_convert_encoding() 的区别
- iconv 函数字符编码转换
- 字符编码的转换iconv
- php多字节编码字符长度检测
- php iconv实现编码转换
- PHP编码转换之iconv
- 多字节编码字符串与UTF8字符编码的转换
- C++编码转换多字节字符宽字符
- iconv 转换字符编码,兼容VC转换
- 关于mbstring多字节字符串处理模块的相关设置
- iconv、mb_convert_encoding字符编码的转换
- iconv字符编码转换全攻略
- Linux下字符编码转换 -- iconv命令
- iconv字符编码转换全攻略
- iconv字符编码转换全攻略
- linux c 字符编码转换函数 iconv
- libpcap
- 二维数组中的查找
- JAVA字节码增强技术之ASM示例
- PostgreSQL的存储过程
- Android:用SharePreferences实现记住密码功能
- php处理多字节字符mbstring及编码转换iconv
- Android 单位转换
- c# 事件响应的简写
- servlet+jsp+jdbc实现简单的登录功能(所用平台:win7+Eclipse+tomcat+mysql)
- Ribbon实现服务器端的负载均衡
- CodeForces 796C Bank Hacking
- Centos7运行两台或多台tomcat
- BZOJ4811: [Ynoi2017]由乃的OJ 重链剖分
- java正则表达式对一些特殊字符匹配的理解