文档章节

内容截取函数

LauraOSC
 LauraOSC
发布于 2016/11/07 15:25
字数 256
阅读 3
收藏 0

/**
 * 内容截取
 *
 * @param $str
 * @param int $length
 * @param string $ext
 * @param string $tag 标签
 * @return string
 */
function getShort($str, $length = 20, $ext = '', $tag = "")
{
    $str = htmlspecialchars($str);
    $str = strip_tags($str);
    $str = htmlspecialchars_decode($str);
    $str = str_replace('—','—',$str); // 过滤中文的破折号
    if ($tag) {
        if (is_string($tag)) {
            $pretag = "<" . $tag . ">";
            $afttag = "</" . $tag . ">";
        }
        if (is_array($tag)) {
            $pretag = "<" . $tag['pre'] . ">";
            $afttag = "</" . $tag['aft'] . ">";
        }
        $str = str_replace($pretag, '$', $str);
        $str = str_replace($afttag, '#', $str);
        $lastTagLen = strrpos($str, '#') - strrpos($str, '$');
    }

    $strlenth = 0;
    $output = '';
    preg_match_all(
        "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/",
        $str,
        $match
    );
    foreach ($match [0] as $v) {
        preg_match("/[\xe0-\xef][\x80-\xbf]{2}/", $v, $matchs);
        if (!empty ($matchs [0])) {
            $strlenth += 1;
        } elseif (is_numeric($v)) {
            // $strlenth += 0.545; // 字符像素宽度比例 汉字为1
            $strlenth += 0.5; // 字符字节长度比例 汉字为1
        } else {
            // $strlenth += 0.475; // 字符像素宽度比例 汉字为1
            $strlenth += 0.5; // 字符字节长度比例 汉字为1
        }

        if ($strlenth > $length) {
            $output .= $ext;
            break;
        }

        $output .= $v;
    }

    if ($tag) {
        $count1 = substr_count($output, "$");
        $count2 = substr_count($output, "#");
        //存在没有结束的标签
        if ($count2 < $count1) {
            $last = strrpos($output, '$');
            $pre_length = $last + $lastTagLen;
            //截取的长度
            if ($lastTagLen <= $strlenth - $last) {
                $pre_output = substr($output, 0, $pre_length);
                $aft_output = substr($output, $pre_length);
                $output = $pre_output . "#" . $aft_output;
            } else {
                $output = $output . "#";
            }
        }

        $output = str_replace("$", $pretag, $output);
        $output = str_replace('#', $afttag, $output);
    }

    return $output;
}

 

 

{$user_name|getShort=7,'...'}

© 著作权归作者所有

LauraOSC
粉丝 9
博文 10
码字总数 3213
作品 0
武汉
程序员
私信 提问
PHP按符号截取字符串的指定部分

字符串截取在php开发中是比较常用的;而且对于截取的需求也有很多种;就比如说对url链接的操作:http://www.baijunyao.com/index.php/Home/Index/article/aid/12 有时我们想截取最后一个斜杠...

白俊遥
2015/08/20
0
0
MySQL必知必会(6):常用文本字符串处理函数

编程语言中经常使用函数来处理一些字符串,数字或者其他内容。也是一样,可以使用函数来快速达到一系列的目的。 在上一篇文章《计算字段的使用》中,我们提前使用了一个函数,来处理字符串两...

星空幻颖
2017/05/06
0
0
shell中的函数、shell中的数组

shell中的函数 函数就是把一段代码整理到一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可 函数的作用: 1,一个脚本里有多行,会反复执行某个代码段...

林怡丰
04/09
0
0
php处理后台编辑器输出内容

在做列表时需要从数据库读取数据集,而我们一般有 显示多少字的需求,后台是一款编辑器,编辑时会产生一些html代码,而在我们前端列表使用了截取函数后,把html源代码也截取了,我提出解决方...

MyClassPHP
2016/10/28
28
0
MySQL下sql语句的使用-170413

1、向表T1中插入表T2中的几个字段: insert into t1 (t1.c1,…,t1.c5) select t2.c1,…,t2.c5 from t2; 2.MySQL中的时间函数: curdate() 2017-04-13 now() 2017-04-13 09:09:09 3.替换:......

文新
2017/04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

0.01-Win10安装linux子系统

一、安装Debian子系统 -1、控制面板设置: -1.1、打开“控制面板” —— “程序” —— “启用或关闭Windows功能” —— 勾选 “适用于Linux的Windows子系统” -2、设置: -2.1、打开“设置”...

静以修身2025
昨天
2
0
init 0-6 (启动级别:init 0,1,2,3,4,5,6)

启动级别: init 0,1,2,3,4,5,6 这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。 0: 停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system...

圣洁之子
昨天
2
0
Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

天王盖地虎626
昨天
2
0
聊聊Elasticsearch的ProcessProbe

序 本文主要研究一下Elasticsearch的ProcessProbe ProcessProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java public class ProcessProb......

go4it
昨天
3
0
mysql PL(procedure language)流程控制语句

在MySQL中,常见的过程式SQL语句可以用在存储体中。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句,它们可以进行流程控制。 IF语句相当于Java中的if()...else if(...

edison_kwok
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部