您的位置:首页 > 编程语言 > PHP开发

PHP截取字符串完美版,不用担心中文截取乱码

2015-07-10 01:02 791 查看
注意:自定义函数要放在项目应用目录/common/common.php中。 这里是关键。

thinkphp调用:{$vo.title|str_cut=###,10,'***'}

PHP调用:str_cut($aa,10);

/**

* 字符截取

* @param $string 需要截取的字符串

* @param $length 长度

* @param $dot

*/

function str_cut($sourcestr, $length, $dot = '...') {

$returnstr = '';

$i = 0;

$n = 0;

$str_length = strlen($sourcestr); //字符串的字节数

while (($n < $length) && ($i <= $str_length)) {

$temp_str = substr($sourcestr, $i, 1);

$ascnum = Ord($temp_str); //得到字符串中第$i位字符的ascii码

if ($ascnum >= 224) {//如果ASCII位高与224,

$returnstr = $returnstr . substr($sourcestr, $i, 3); //根据UTF-8编码规范,将3个连续的字符计为单个字符

$i = $i + 3; //实际Byte计为3

$n++; //字串长度计1

} elseif ($ascnum >= 192) { //如果ASCII位高与192,

$returnstr = $returnstr . substr($sourcestr, $i, 2); //根据UTF-8编码规范,将2个连续的字符计为单个字符

$i = $i + 2; //实际Byte计为2

$n++; //字串长度计1

} elseif ($ascnum >= 65 && $ascnum <= 90) { //如果是大写字母,

$returnstr = $returnstr . substr($sourcestr, $i, 1);

$i = $i + 1; //实际的Byte数仍计1个

$n++; //但考虑整体美观,大写字母计成一个高位字符

} else {//其他情况下,包括小写字母和半角标点符号,

$returnstr = $returnstr . substr($sourcestr, $i, 1);

$i = $i + 1; //实际的Byte数计1个

$n = $n + 0.5; //小写字母和半角标点等与半个高位字符宽...

}

}

if ($str_length > strlen($returnstr)) {

$returnstr = $returnstr . $dot; //超过长度时在尾处加上省略号

}

return $returnstr;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: