PHP截取html字符串(二)

来源:互联网 发布:unity3d 2d骨骼动画 编辑:程序博客网 时间:2024/05/16 06:48

测试成功过


<?php
function substr_ignore_tags($str, $len = 0){
    function strRepeat($str, $frequency){
        if(!$frequency){
            return ;
        }
        for($i = 0; $i < $frequency; $i++){
            $str .= $str;
        }
        return $str;
    }

    $str = preg_replace('#(</?[^>]+>)#', chr(9) . '\1', $str);
    $arr = explode(chr(9), $str);
    if(count($arr) == 1){
        return $str;
    }
    
    $str = '';
    while(strlen(strip_tags($str)) < $len){
        $_str = array_shift($arr);
        $strLen = strlen(strip_tags($str));
        $_strLen = strlen(strip_tags($_str));
        if($strLen + $_strLen >= $len){
            $getLen = $len - $strLen;
            preg_match_all('#(</?[^>]+>)#', $_str, $match);
            if(!isset($match[0][0])){
                return $_str;
            }
            $endTag = $match[0][0];
            $str .= $endTag . substr(strip_tags($_str), 0, $getLen);
            break;
        }else{
            $str .= $_str;
        }
    }

    preg_match_all('#(</?[^>]+>)#', $str, $match);
    $allTags = array_reverse($match[0]);

    $_allTags = array();
    foreach($allTags as $tag){
        if(strpos($tag, '</') !== false){
            preg_match('#</([^>]+)>#', $tag, $_tag);
            if(isset($_allTags[trim($_tag[1])]['n_num'])){
                $_allTags[trim($_tag[1])]['n_num'] += 1;
            }else{
                $_allTags[trim($_tag[1])] = array('s_num' => 0, 'n_num' => 1);
            }
        }else{
            preg_match('#<([^ ]+)([^>]*)>#', $tag, $_tag);
            if(isset($_allTags[trim($_tag[1])]['s_num'])){
                $_allTags[trim($_tag[1])]['s_num'] += 1;
            }else{
                $_allTags[trim($_tag[1])] = array('s_num' => 1, 'n_num' => 0);
            }
        }
    }

    foreach($_allTags as $tag => $info){
        $str .= strRepeat('</' . $tag . '>', $info['n_num'] - $info['s_num']);
    }

    return $str;
}

$str    = 'aaaaa<span style="color: red">bbbbb<b>ccccc</b>ddddd</span>eeeee';
$len    = 6;
echo substr_ignore_tags($str, $len);
?>


原创粉丝点击