没事写了两个函数,php中gbk和utf-8中文无乱码截取
来源:互联网 发布:指绘软件meidbang 编辑:程序博客网 时间:2024/05/22 06:42
一,gbk/gb2312中文截取
在gbk/gb2312编码中一个中文占两个字节,一个ascii字符占一个字节,函数如下:
//gbk,gb2312字符串截取函数function gbk_substr($str,$len){if($len<=0)return '';$chars=0;$bytes=0;$str_bytes=strlen($str);for($i=0;$i<$str_bytes && $chars<$len;$chars++){if(ord($str[$i])>127){//当字符的码值大于127时为中文,此时应该截取两个字节$bytes += 2;$i += 2;}else{$bytes += 1;$i += 1;}}return substr($str,0,$bytes);}
二,utf-8中文截取
在utf-8编码中,基本上包含了世界各国的所有文字,各种字符占1-6个字节不等,比如一个中文通常占3个字节
//utf-8字符串截取函数function utf8_substr($str,$len){if($len<=0)return '';$chars=0;$bytes=0;$str_bytes=strlen($str);for($i=0;$i<$str_bytes && $chars<$len;$chars++){$bin_str=decbin(ord($str[$i]));if(strlen($bin_str)<8){ $bytes += 1; $i += 1; }else if(($bin_str & "11100000")=="11000000"){ $bytes += 2; $i += 2; }else if(($bin_str & "11110000")=="11100000"){ $bytes += 3; $i += 3; }else if(($bin_str & '11111000')=='11110000'){ $bytes += 4; $i += 4; }else if(($bin_str & "11111100")=="11111000"){ $bytes += 5; $i += 5; }else if(($bin_str & "11111110")=="11111100"){ $bytes += 6; $i += 6; }}return substr($str,0,$bytes);}
- 没事写了两个函数,php中gbk和utf-8中文无乱码截取
- php utf-8字符集下实现中文无乱码截取
- 中文UTF-8截取无乱码 算法
- GBK和Utf-8字符串截取函数
- PHP的两个常用函数截取中文字符串无乱码与获取客户端IP地址
- PHP的两个常用函数截取中文字符串无乱码与获取客户端IP地址
- PHP utf-8中文截取无乱码(字符串判断版本)
- php截取中文无乱码
- PHP截取中文无乱码
- php中文截取无乱码
- PHP 中文无乱码截取
- PHP中截取UTF-8中文字符串
- php 截取UTF-8 GBK汉字
- 解决utf-8和GBK中文乱码问题
- 中文截取无乱码、 顺序查找和二分查找函数
- php utf-8截取中文
- PHP 中文字符串截取无乱码的方法以及php汉字截取函数_preg_split()
- PHP中文截取,UTF8和GBK详解
- 在ubuntu操作系统中安装ruby,rails,mysql的详细步骤(一)
- 使用MyBatis链接MySQL
- Vmware上安装Vxworks 5.5
- cwe error
- 电脑控制手机的另一选择 - android vnc server
- 没事写了两个函数,php中gbk和utf-8中文无乱码截取
- 黑马程序员_java交通灯系统
- n2
- 第02讲:正确使用织梦(DEDECMS)后台的数据备份与还原功能
- 前端开发网摘面试题 与答案
- strcat源码
- 在 Android 中调用二进制可执行程序(native executable )
- block 和 inline 的区别是什么
- OOAD之设计模式-行为模式