cn_substr substr()函数中文版 mb_substr也可以完成
来源:互联网 发布:python 调用百度搜索 编辑:程序博客网 时间:2024/04/27 01:56
if(!function_exists('cn_substr')){ function cn_substr($string='',$start=0,$length=0,$lang='gbk'){ switch($lang){ case 'gbk':$step = 1;break; case 'utf-8';$step = 2;break; default:$step = 2;break; } $result = ''; $stringlength = strlen($string); $length = intval($length); $start = intval($start); if($length==0||$stringlength<$start+1){ return ''; } $index = 0; for($i=0;$i<$stringlength;$i++){ $char = ''; if($length){ if(ord($string[$i])>0x80){ for($j=$i;$j<=$i+$step;$j++){ $char .= $string[$j]; } $i+=$step; }else{ $char = $string[$i]; } $index++; if($index>=$start){ $length--; $result .= $char; } }else{ break; } } return $result; }}echo cn_substr('left花衣', 1, 4);
php截取utf8字符串和gbk字符串函数
在 PHP 中,我们直接使用PHP strlen函数进行字符串截取,对于英文字符,没有什么区别,输出的结果都是一样的,而在截取中文时,却有一点小小的问题,我们知道,字符分为两种状态,一种是 gbk 字符串,另一种就是 utf-8 字符串,如果按照常规的输出方法,输出的结果是不一样的。
php strlen 函数最基本的参数有 str 字符串,len 长度,start 开始位置,如果截取的字符串 gbk 格式,那么 len 的步长为 1,截取“夏日博客”,只取前两个字符,输出就是“夏日”,而截取的字符串类型是 utf-8 格式的话,那么 len的步长则为 2,输出的结果为“夏日博”,这也就是两种格式输出不一样的原因。
简要说明一下截出输入的步长,以“夏日博客”为例,步长从 0 开始,从开始的“夏”之前开始算起,第一步为0,则“夏”之后为第二步为 1,依此类推。
依照上述原理,我们可以写一个同时支持截取 gbk 和 utf-8 字符的函数,如下:
------------------------------------------------------------------------
cn_substr 只支持utf-8
substr()函数中文版 普通的substr()函数可以取得字符串的指定长度子字符串,但遇到中文时可能会在新字符串末尾产生乱码,下面这个函数将超过$len长度的字符串转换成以“...”结尾,并且去除了乱码。
用法:$new =
substr($old,20);
function cn_substr($str,$len) { $end = $len<strlen($str)?$len:strlen($str); for($i = 0;$i <$end;$i++) { if ($i >=0 AND $i <$end) { if(ord(substr($str,$i,1)) > 0xa1) $result_str.=substr($str,$i,2); else $result_str.=substr($str,$i,1); } if(ord(substr($str,$i,1)) > 0xa1) $i++; } return $result_str; if(strlen($str)<=$end) return $result_str; else return $result_str."..."; }
function sub_str($str, $length = 0, $append = true){ $str = trim($str); $strlength = strlen($str); if ($length == 0 || $length >= $strlength) { return $str; //截取长度等于0或大于等于本字符串的长度,返回字符串本身 } elseif ($length < 0) //如果截取长度为负数 { $length = $strlength + $length;//那么截取长度就等于字符串长度减去截取长度 if ($length < 0) { $length = $strlength;//如果截取长度的绝对值大于字符串本身长度,则截取长度取字符串本身的长度 } } if (function_exists('mb_substr')) { $newstr = mb_substr($str, 0, $length, EC_CHARSET); } elseif (function_exists('iconv_substr')) { $newstr = iconv_substr($str, 0, $length, EC_CHARSET); } else { //$newstr = trim_right(substr($str, 0, $length)); $newstr = substr($str, 0, $length); } if ($append && $str != $newstr) { $newstr .= '...'; } return
0 0
- cn_substr substr()函数中文版 mb_substr也可以完成
- php函数substr、mb_substr、mb_strcut截取中文比较
- thinkphp 模板中使用mb_substr(),substr()函数
- php substr,iconv_substr,mb_substr
- substr,mb_substr,iconv_substr的区别
- iconv_substr($rs[0][file_info],0,16,"GB2312") substr()mb_substr()/mb_strcut这个函数 解决乱码
- PHP中substr、mb_substr、mb_strcut这三个截取字符串函数的比较
- substr(),mb_substr(),mb_strcut()的使用心得
- substr(),mb_substr()及mb_strcut的区别
- PHP substr(),mb_substr()及mb_str…
- substr mb_substr 解决PHP substr 截取汉字乱码问题
- php mb_substr 函数
- php mb_substr()函数
- PHP substr(),mb_substr()及mb_strcut的区别和用法
- substr(),mb_substr()及mb_strcut的区别和用法
- substr(),mb_substr()及mb_strcut的区别和用法
- PHP substr(),mb_substr()及mb_strcut的区别和用法
- PHP substr(),mb_substr()及mb_strcut的区别和用法
- 【Matlab学习笔记】【函数学习】nargin 参数
- 黑马程序员--iOS--C基础(二)
- 重学java23种设计模式(5)单例模式
- hdu-1421-搬寝室 线性dp
- 函数的认知
- cn_substr substr()函数中文版 mb_substr也可以完成
- [Erlang]Binary陷阱汇总
- Anti_flicker(去水波纹即闪光)与HB,VB与CLK的关系
- 丑人国(1~5章)
- 2015-07-27 悲催的我
- Android 简单实现ListView顶部悬浮效果
- linux /etc/security/limits.conf的相关说明
- Android Service Bind with Activity
- iOS OC08,09_内存管理