多个PHP中文字符串截取函数


Posted in PHP onNovember 12, 2013
<?php
function sysSubStr($string,$length,$append = false) 
{ 
    if(strlen($string) <= $length ) 
    { 
        return $string; 
    } 
    else 
    { 
        $i = 0; 
        while ($i < $length) 
        { 
            $stringTMP = substr($string,$i,1); 
            if ( ord($stringTMP) >=224 ) 
            { 
                $stringTMP = substr($string,$i,3); 
                $i = $i + 3; 
            } 
            elseif( ord($stringTMP) >=192 ) 
            { 
                $stringTMP = substr($string,$i,2); 
                $i = $i + 2; 
            } 
            else 
            { 
                $i = $i + 1; 
            } 
            $stringLast[] = $stringTMP; 
        } 
        $stringLast = implode("",$stringLast); 
        if($append) 
        { 
            $stringLast .= "..."; 
        } 
        return $stringLast; 
    } 
} $string = "简明现代魔法 —— 专注于互联网主流的各种技术"; 
$length = "27"; 
$append = true; 
echo sysSubStr($string,$length,$append); 
// 输出 
// 简明现代魔法 —— 专...
?>

截取GB2312中文字符串:

<?php
//截取中文字符串
function mysubstr($str, $start, $len) {
    $tmpstr = "";
    $strlen = $start + $len;
    for($i = 0; $i < $strlen; $i++) {
        if(ord(substr($str, $i, 1)) > 0xa0) {
            $tmpstr .= substr($str, $i, 2);
            $i++;
        } else
            $tmpstr .= substr($str, $i, 1);
    }
    return $tmpstr;
}
?>

截取utf8编码的多字节字符串:

<?php
//截取utf8字符串
function utf8Substr($str, $from, $len)
{
    return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                       '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                       '$1',$str);
}
?>

UTF-8、GB2312都支持的汉字截取函数:

<?php
/* 
Utf-8、gb2312都支持的汉字截取函数 
cut_str(字符串, 截取长度, 开始长度, 编码); 
编码默认为 utf-8 
开始长度默认为 0 
*/ function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') 
{ 
    if($code == 'UTF-8') 
    { 
        $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; 
        preg_match_all($pa, $string, $t_string); 
        if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; 
        return join('', array_slice($t_string[0], $start, $sublen)); 
    } 
    else 
    { 
        $start = $start*2; 
        $sublen = $sublen*2; 
        $strlen = strlen($string); 
        $tmpstr = ''; 
        for($i=0; $i< $strlen; $i++) 
        { 
            if($i>=$start && $i< ($start+$sublen)) 
            { 
                if(ord(substr($string, $i, 1))>129) 
                { 
                    $tmpstr.= substr($string, $i, 2); 
                } 
                else 
                { 
                    $tmpstr.= substr($string, $i, 1); 
                } 
            } 
            if(ord(substr($string, $i, 1))>129) $i++; 
        } 
        if(strlen($tmpstr)< $strlen ) $tmpstr.= "..."; 
        return $tmpstr; 
    } 
} 
$str = "abcd需要截取的字符串"; 
echo cut_str($str, 8, 0, 'gb2312'); 
?>
PHP 相关文章推荐
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
PHP反射机制用法实例
Aug 28 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 #PHP
CodeIgniter使用phpcms模板引擎
Nov 12 #PHP
php用正则表达式匹配URL的简单方法
Nov 12 #PHP
CodeIgniter基本配置详细介绍
Nov 12 #PHP
PHP URL路由类实例
Nov 12 #PHP
PHP set_error_handler()函数使用详解(示例)
Nov 12 #PHP
php inc文件使用的风险和注意事项
Nov 12 #PHP
You might like
php获取本周星期一具体日期的方法
2015/04/20 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
javascript 全角转换实现代码
2009/07/17 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
python 多线程实现检测服务器在线情况
2015/11/25 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python sort、sort_index方法代码实例
2019/03/28 Python
python3.5安装python3-tk详解
2019/04/26 Python
Python单链表原理与实现方法详解
2020/02/22 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
django下创建多个app并设置urls方法
2020/08/02 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
金士达面试非笔试
2012/03/14 面试题
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
歌颂祖国演讲稿
2014/05/04 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
师德师风的心得体会
2014/09/02 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
php将xml转化对象的实例详解
2021/11/17 PHP