多个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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
php 运行效率总结(提示程序速度)
Nov 26 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
删除PHP数组中的重复元素的实现代码
Apr 10 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 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
2009/06/29 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
php获取根域名方法汇总
2014/10/28 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
在python中使用with打开多个文件的方法
2019/01/07 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
Python List cmp()知识点总结
2019/02/18 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
python软件都是免费的吗
2020/06/18 Python
十佳青年个人事迹材料
2014/01/28 职场文书
八一建军节感言
2014/02/28 职场文书
新学期标语
2014/06/30 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android