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;
}
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;
}
相关文章推荐
- Laravel学习
- PHP环境搭建记录
- PHP Using list() with foreach()
- php学习流程图
- PHP基于phpqrcode生成带LOGO图像的二维码实例
- PHP中把对象数组转换成普通数组的方法
- php中实现用数组妩媚地生成要执行的sql语句
- php获取文件类型和文件信息的方法
- php中array_multisort对多维数组排序的方法
- php通过前序遍历树实现无需递归的无限极分类
- php目录拷贝实现方法
- PHP实现事件机制的方法
- PHP 怎样防盗链代码实现
- 提高PHP编程效率的53个要点
- windows2008 php不能连接mysql问题
- fatfree-f3小型php框架(二)
- 推荐 PHP 和 MYSQL 书籍
- 查看PHP编译参数
- phpstudy安装与织梦CMS搭建
- php函数中使用html的一种用法