多个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 相关文章推荐
基于mysql的论坛(5)
Oct 09 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
10个简化PHP开发的工具
Dec 25 PHP
php中判断数组相等的方法以及数组运算符介绍
Mar 30 PHP
PHP获取音频文件的相关信息
Jun 22 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
Laravel 验证码认证学习记录小结
Dec 20 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
多重?l件?合查?(二)
2006/10/09 PHP
php实现Session存储到Redis
2015/11/11 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
质量管理标语
2014/06/12 职场文书
物业保安岗位职责
2014/07/02 职场文书
婚前财产协议书范本
2014/10/19 职场文书
2014年团队工作总结
2014/11/24 职场文书
写给导师的自荐信
2015/03/06 职场文书
初中物理教学反思
2016/02/19 职场文书
技术入股合作协议书
2016/03/21 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis