php常用自建函数学习(1):标题或内容超过长度时在尾处加上省略号...

简介: php常用自建函数学习(1):标题或内容超过长度时在尾处加上省略号...
/*
 * 函数说明:截取指定长度的字符串
 *         utf-8专用 汉字和大写字母长度算1,其它字符长度算0.5
 *
 * @param  string  $str  原字符串
 * @param  int     $len  截取长度
 * @param  string  $etc  省略字符...
 * @return string        截取后的字符串
 */
if(!function_exists('ReStrLen'))
{
    function ReStrLen($str, $len=10, $etc='...')
    {
        $restr = '';
        $i = 0;
        $n = 0.0;
        //字符串的字节数
        $strlen = strlen($str);
        while(($n < $len) and ($i < $strlen))
        {
            $temp_str = substr($str, $i, 1);
            //得到字符串中第$i位字符的ASCII码
            $ascnum = ord($temp_str);
            //如果ASCII位高与252
            if($ascnum >= 252)
            {
                //根据UTF-8编码规范,将6个连续的字符计为单个字符
                $restr = $restr.substr($str, $i, 6);
                //实际Byte计为6
                $i = $i + 6;
                //字串长度计1
                $n++;
            }
            else if($ascnum >= 248)
            {
                $restr = $restr.substr($str, $i, 5);
                $i = $i + 5;
                $n++;
            }
            else if($ascnum >= 240)
            {
                $restr = $restr.substr($str, $i, 4);
                $i = $i + 4;
                $n++;
            }
            else if($ascnum >= 224)
            {
                $restr = $restr.substr($str, $i, 3);
                $i = $i + 3 ;
                $n++;
            }
            else if ($ascnum >= 192)
            {
                $restr = $restr.substr($str, $i, 2);
                $i = $i + 2;
                $n++;
            }
            //如果是大写字母 I除外
            else if($ascnum>=65 and $ascnum<=90 and $ascnum!=73)
            {
                $restr = $restr.substr($str, $i, 1);
                //实际的Byte数仍计1个
                $i = $i + 1;
                //但考虑整体美观,大写字母计成一个高位字符
                $n++;
            }
            //%,&,@,m,w 字符按1个字符宽
            else if(!(array_search($ascnum, array(37, 38, 64, 109 ,119)) === FALSE))
            {
                $restr = $restr.substr($str, $i, 1);
                //实际的Byte数仍计1个
                $i = $i + 1;
                //但考虑整体美观,这些字条计成一个高位字符
                $n++;
            }
            //其他情况下,包括小写字母和半角标点符号
            else
            {
                $restr = $restr.substr($str, $i, 1);
                //实际的Byte数计1个
                $i = $i + 1;
                //其余的小写字母和半角标点等与半个高位字符宽
                $n = $n + 0.5;
            }
        }
        //超过长度时在尾处加上省略号
        if($i < $strlen)
        {
            $restr = $restr.$etc;
        }
        return $restr;
    }
}
相关文章
|
1天前
|
PHP
原生php制作分页函数
原生php制作分页函数
5 0
|
1月前
|
PHP Perl
PHP-ereg()函数
但再次强调,不建议使用ereg()函数,而应该改用preg_match()函数来执行更灵活和强大的正则表达式匹配操作。
30 4
|
1月前
|
运维 JavaScript Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,Php环境,配置取消禁止函数exec如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
319 4
|
1月前
|
PHP
php事务删除加调用日志函数
php事务删除加调用日志函数
16 1
|
1月前
|
存储 PHP 数据库
【PHP开发专栏】PHP数组操作与常见函数
【4月更文挑战第29天】本文介绍了PHP中的数组及其操作,包括定义与初始化、访问与修改、遍历。还探讨了常用的数组函数,如count()、in_array()、array_push/pop()、array_shift/unshift()、array_merge()、array_keys/values()以及sort()和rsort(),帮助开发者更有效地处理和操作数组。
|
1月前
|
JSON PHP 数据格式
php函数
php函数
16 0
|
1月前
|
PHP
从建站到拿站 -- PHP判断循环及函数
从建站到拿站 -- PHP判断循环及函数
20 0
|
1天前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
8 1
|
1月前
|
关系型数据库 MySQL PHP