首页 > 程序开发 > PHP > PHP之根据内容长度截取HTML字符串
2015
02-08

PHP之根据内容长度截取HTML字符串

有些时候我们截取字符串的时候是带有HTML标签的,如果截取的时候只考虑内容长度而不包含HTML标签,截取字符串之后还要带有HTML标签,那么我们应该如何做呢?下面提供一个PHP方法:

/**
 * 截取html字符串
 *
 * @param string  $s 字符串
 * @param integer $zi 长度
 * @param string  $ne 没有结束符的html标签
 * @return string
 */
function htmlcut($s, $len, $ne = ',br,hr,input,img,') {
    $s = preg_replace('/\s{2,}/', ' ', $s);
    $os = preg_split('/<[\S\s]+?>/', $s);
    preg_match_all('/<[\S\s]+?>/', $s, $or);
    $s = '';
    $tag = array();
    foreach ($os as $k => $v) {
        if ($v != '' && $v != ' ') {
            $l = strlen($v);
            for ($i = 0; $i < $l; $i++) {
                if (ord($v[$i]) > 127) {
                    $s.=$v[$i] . $v[++$i] . $v[++$i];
                } else {
                    $s.=$v[$i];
                }
                $len--;
                if ($len < 1) {
                    break 2;
                }
            }
        }
        preg_match('/<\/?([^\s>]+)[\s>]{1}/', $or[0][$k], $t);
        $s.=$or[0][$k];
        if (strpos($ne, ',' . strtolower($t[1]) . ',') === false && $t[1] != '' && $t[1] != ' ') {
            $k = array_search('</' . $t[1] . '>', $tag);
            if ($k !== false) {
                unset($tag[$k]);
            } else {
                array_unshift($tag, '</' . $t[1] . '>');
            }
        }
    }
 
    return $s . implode('', $tag);
}

使用测试:

$str = '<span>位置:<a href="http://www.uuling.com">首页</a>><a href="http://www.uuling.com/web/">前端开发</a> > <a href="http://www.uuling.com/share/">源码分享</a> > 正文</span>';
 
echo htmlcut($str, 5);

输出结果:位置:首页
查看源代码

<span>位置:<a href="http://www.uuling.com">首页</a></span>
最后编辑日期:
作者:uuling
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。