多个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 相关文章推荐
ThinkPHP分页类使用详解
Mar 05 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
php简单实现单态设计模式的方法分析
Jul 28 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
PHP 中魔术常量的实例详解
Oct 26 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 PHP
Windows服务器中PHP如何安装redis扩展
Sep 27 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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
农民C键的运用技巧
2020/03/04 星际争霸
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
浅谈js中的this问题
2017/08/31 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
Node.js使用Angular简单示例
2018/05/11 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
Python实现统计代码行的方法分析
2017/07/12 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
个人自我鉴定总结
2014/03/25 职场文书
支部书记四风对照材料
2014/08/28 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
董存瑞观后感
2015/06/11 职场文书
七夕情人节问候语
2015/11/11 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis