没事写了两个函数,php中gbk和utf-8中文无乱码截取
2012-12-30 21:07
519 查看
一,gbk/gb2312中文截取
在gbk/gb2312编码中一个中文占两个字节,一个ascii字符占一个字节,函数如下:
二,utf-8中文截取
在utf-8编码中,基本上包含了世界各国的所有文字,各种字符占1-6个字节不等,比如一个中文通常占3个字节
在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字符串截取函数(解决中文乱码问题!支持UTF-8和GB2312)
- PHP的两个常用函数截取中文字符串无乱码与获取客户端IP地址
- PHP技术分享--实现中文字串截取无乱码的函数(适用于utf-8)
- PHP的两个常用函数截取中文字符串无乱码与获取客户端IP地址
- php smarty截取中文字符乱码问题?gb2312/utf-8
- PHP中的字符串截取函数,取子符串,以保证中文不出现乱码
- PHP utf-8中文截取无乱码
- PHP中文字符串截取无乱码方法,php汉字截取函数_preg_split()
- PHP UTF-8字符串截断函数实现中文字符的无乱码截断
- PHP截取中文无乱码函数——cutstr
- PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
- 用php截取utf-8中文字符串乱码的解决方法
- php 字符串操作函数substr()截取中文子串乱码问题
- PHP utf-8中文截取无乱码(字符串判断版本)
- PHP截取UTF-8字符串函数乱码解决方案【绝对好用】
- PHP 中文字符串截取函数(UTF-8)有效
- php smarty截取中文字符乱码问题?gb2312/utf-8
- PHP中的中文截取乱码问题_gb2312_utf-8
- php截取中文字符串无乱码的函数(主函数:ord()、substr())
- php utf-8字符集下实现中文无乱码截取