substr,mb_substr,mb_strcut,详解与中文字符串的截取无乱码
2013-04-02 12:16
387 查看
substr截取中文字符串会出现乱码,substr是按照单字节截取的,
mb_substr,mb_strcut都可以截取中文字符串,其中mb_substr是按照字符的个数截取(包括中文字符),mb_strcut是按照字节截取;
php扩展函数一般比自定义的字符串函数速度快,比如下面这个自定义函数就比php自带的函数慢5到6倍;
mb_substr,mb_strcut都可以截取中文字符串,其中mb_substr是按照字符的个数截取(包括中文字符),mb_strcut是按照字节截取;
$str='水电费22sf223飞说的法士大夫24234是福施福士大夫'; echo mb_strcut($str, 0, 17, 'utf-8').'1<br />';//输出:水电费22sf223 echo mb_strcut($str, 3, 17, 'utf-8').'2<br />';//输出:电费22sf223飞 echo mb_strcut($str, -3, -2, 'utf-8').'3<br />';//输出:空值 echo mb_strcut($str, -3, 2, 'utf-8').'4<br />';//输出:空值 echo mb_strcut($str, 3, -2, 'utf-8').'5<br />';//输出:电费22sf223飞说的法士大夫24234是福施福士大 $str='水电费22sf223飞说的法士大夫24234是福施福士大夫'; echo mb_substr($str, 0, 17, 'utf-8').'<br />';//输出:水电费22sf223飞说的法士大夫 echo mb_substr($str, 3, 17, 'utf-8').'<br />';//输出:费22sf223飞说的法士大夫242 echo mb_substr($str, -3, -2, 'utf-8').'<br />';//输出:福士 echo mb_substr($str, -3, 2, 'utf-8').'<br />';//输出:士大 echo mb_substr($str, 3, -2, 'utf-8').'<br />';//输出:22sf223飞说的法士大夫24234是福施福士 echo "<br /><br />"; $str='234sdh24324shkfsdfsdf'; echo substr($str,0,2).'<br />';//输出:23 echo substr($str,3,3).'<br />';//输出:sdh echo substr($str,-7,3).'<br />';//输出:fsd echo substr($str,-3).'<br />';//输出:sdf echo substr($str,-3,-6).'<br />';//输出:空值 echo substr($str,-6,-3).'<br />';//输出:sdf echo substr($str,3,-2).'<br />';//输出:sdh24324shkfsdfs
php扩展函数一般比自定义的字符串函数速度快,比如下面这个自定义函数就比php自带的函数慢5到6倍;
$str='水电费22sf223飞说的法士大夫24234是福施福士大夫'; echo cutstr($str, 17, $suffix = ''); function cutstr($string, $length, $suffix = '') { $p = 0; $j = 0; if($string == "") { return ""; } preg_match_all('/([x41-x5a,x61-x7a,x30-x39])/', $string, $letter); //字母 $string_len = strlen($string); $let_len = count($letter[0]); if($string_len == $let_len) { //没有汉字 $len = floor($length / 2); if($string_len > $len) return substr($string, 0, $len) . $suffix; else return substr($string, 0, $len); } $length_tmp = ($string_len - $let_len * 2) + $let_len * 2; if($length_tmp > $length) { for ($k=0;$k<=($length-3);$k++) { $j++; if($j > ($length-3)) { break; } if (ord(substr($string,$k,1)) >= 129) { $k+=2; $j+=2; } else { $p++; } if($p == 2) { $j++; $p = 0; } } $string = substr($string, 0, $k); } $string = str_replace("<BR…","<BR>…",$string); $string = str_replace("<B…","<BR>…",$string); $string = str_replace("<…","<BR>…",$string); if($string_len > strlen($string)) return $string . $suffix; else return $string; }
相关文章推荐
- PHP使用mb_substr()解决中文字符串截取乱码问题
- PHP使用mb_substr()解决中文字符串截取乱码问题
- PHP用substr截取字符串出现中文乱码问题用mb_substr
- php截取中文字符串长度的mb_substr()、mb_strcut()函数 附strlen/mb_strlen
- php截取中文字符串长度的mb_substr()、mb_strcut()函数
- PHP截取中文字符无乱码 mb_substr()
- 对于比较好的支持中文截取字符串的方法。mb_substr
- php函数substr、mb_substr、mb_strcut截取中文比较
- PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
- PHP中使用substr()截取字符串出现中文乱码问题该怎么办
- PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
- php 字符串操作函数substr()截取中文子串乱码问题
- 分析substr来截取UTF-8中文字符串出现乱码问题
- php如何分割字符串?php mb_substr分割字条串,解决中文乱码问题,支持分割中文! (转)
- PHP中使用substr()截取字符串出现中文乱码问题该怎么办
- 中文字符串截取(mb_substr)和获取字数(mb_strlen)
- php截取中文字符串无乱码的函数(主函数:ord()、substr())
- php截取字符串(中文字符截取mb_substr)
- PHP中文字符串截取(mb_substr)和获取中文字符串字数
- PHP mb_strcut 和 mb_substr 字符串截取的简单使用