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月前
|
SQL 关系型数据库 MySQL
如何学习PHP编程?
【10月更文挑战第2天】如何学习PHP编程?
38 9
|
2月前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
8天前
|
关系型数据库 MySQL 数据库连接
PHP内置函数
PHP内置函数
19 5
|
2月前
|
存储 API PHP
php学习笔记-php数组的创建和使用,数组常用函数-day03
关于PHP数组的创建、使用以及常用函数的详细学习笔记。
php学习笔记-php数组的创建和使用,数组常用函数-day03
|
1月前
|
Unix PHP 数据库
PHP日期和时间Date()函数获取当前时间
通过灵活运用 `date()`函数及其丰富的格式选项,PHP开发者可以轻松地在应用程序中处理和展示日期及时间信息。无论是需要精确到秒的完整时间戳,还是仅仅展示日期或时间的某一部分,`date()`函数都能胜任。理解并熟练应用这些格式化技巧,对于提升代码的可读性和维护性至关重要。
43 1
|
2月前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
2月前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
2月前
|
SQL 安全 IDE
如何开始学习PHP?
【9月更文挑战第1天】如何开始学习PHP?
46 1
|
PHP
PHP 可变函数
PHP 可变函数
44 0