suchen
Heimphp教程php手册php截取html字符串自动补全html标签

文章来总结一下关于利用php截取html字符串自动补全html标签,实际开发中会经常碰到,很多人直接先strip_tags过滤掉html标签,但是就只剩下纯文本了,可读性非常差,下面是一个函数,代码如下:

<?php
/** 
 * 截取HTML,并自动补全闭合
 * @param $html
 * @param $length
 * @param $end
 */
function subHtml($html, $length) {
    $result = &#39;&#39;;
    $tagStack = array();
    $len = 0;
    $contents = preg_split("~(<[^>]+?>)~si", $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
    foreach ($contents as $tag) {
        if (trim($tag) == "") & nbsp;
        continue;
        if (preg_match("~<([a-z0-9]+)[^/>]*?/>~si", $tag)) {
            $result.= $tag;
        } else if (preg_match("~</([a-z0-9]+)[^/>]*?>~si", $tag, $match)) {
            if ($tagStack[count($tagStack) - 1] == $match[1]) {
                array_pop($tagStack);
                $result.= $tag;
            }
        } else if (preg_match("~<([a-z0-9]+)[^/>]*?>~si", $tag, $match)) {
            array_push($tagStack, $match[1]);
            $result.= $tag;
        } else if (preg_match("~<!--.*?-->~si", $tag)) {
            $result.= $tag;
        } else {
            if ($len + mstrlen($tag) < $length) {
                $result.= $tag;
                $len+= mstrlen($tag);
            } else {
                $str = msubstr($tag, 0, $length - $len + 1);
                $result.= $str;
                break;
            }
        }
    }
    while (!emptyempty($tagStack)) {
        $result.= &#39;</&#39; . array_pop($tagStack) . &#39;>&#39;;
    }
    return  
    $result;
}
/** 
 * 截取中文字符串
 * @param $string 字符串
 * @param $start 起始位
 * @param $length 长度
 * @param $charset  编码
 * @param $dot 附加字串
 */
function msubstr($string, $start, $length, $dot = &#39;&#39;, $charset = &#39;UTF-8&#39;) {
    $string = str_replace(array(
        &#39;&&#39;,
        &#39;"&#39;,
        &#39;<&#39;,
        &#39;>&#39;,
        &#39; &#39;
    ) , array(
        &#39;&&#39;,
        &#39;"&#39;,
        &#39;<&#39;,
        &#39;>&#39;,
        &#39; &#39;
    ) , $string);
    if (strlen($string) <= $length) {
        return $string;
    }
    if (strtolower($charset) == &#39;utf-8&#39;) {
        $n = $tn = $noc = 0;
        while ($n < strlen($string)) {
            $t = ord($string[$n]);
            if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
                $tn = 1;
                $n++;
            } elseif (194 <= $t && $t <= 223) {
                $tn = 2;
                $n+= 2;
            } elseif (224 <= $t && $t <= 239) {
                $tn = 3;
                $n+= 3;
            } elseif (240 <= $t && $t <= 247) {
                $tn = 4;
                $n+= 4;
            } elseif (248 <= $t && $t <= 251) {
                $tn = 5;
                $n+= 5;
            } elseif ($t == 252 || $t == 253) {
                $tn = 6;
                $n+= 6;
            } else {
                $n++;
            }
            $noc++;
            if ($noc >= $length) {
                break;
            }
        }
        if ($noc > $length) {
            $n-= $tn;
        }
        $strcut = substr($string, 0, $n);
    } else {
        for ($i = 0; $i < $length; $i++) {
            $strcut.= ord($string[$i]) > 127 ? $string[$i] . $string[++$i] : $string[$i];
        }
    }
    return $strcut . $dot;
}
/** 
 * 取得字符串的长度,包括中英文。
 */
function mstrlen($str, $charset = &#39;UTF-8&#39;) {
    if (function_exists(&#39;mb_substr&#39;)) {
        $length = mb_strlen($str, $charset);
    } elseif (function_exists(&#39;iconv_substr&#39;)) {
        $length = iconv_strlen($str, $charset);
    } else {
        preg_match_all("/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/", $text, $ar); & nbsp;
        $length = count($ar[0]);
    }
    return $length;
}
?>

实例,代码如下:

<?php
/*
* @param 要截取的HTML $str 
* @param 截取的数量 $num 
* @param 是否需要加上更多 $more 
* @return 截取串 
*/ 
$leng = strlen($str);
    if ($num >= $leng) return $str;
    $word = 0;
    $i = 0;
    /** 字符串指针 **/
    $stag = array(
        array()
    );
    /** 存放开始HTML的标志 **/
    $etag = array(
        array()
    );
    /** 存放结束HTML的标志 **/
    $sp = 0;
    $ep = 0;
    while ($word != $num) {
        if (ord($str[$i]) > 128) {
            //$re.=substr($str,$i,3);
            $i+= 3;
            $word++;
        } else if ($str[$i] == &#39;<&#39;) {
            if ($str[$i + 1] == &#39;!&#39;) {
                $i++;
                continue;
            }
            if ($str[$i + 1] == &#39;/&#39;) {
                $ptag = & $etag;
                $k = & $ep;
                $i+= 2;
            } else {
                $ptag = & $stag;
                $i+= 1;
                $k = & $sp;
            }
            for (; $i < $leng; $i++) {
                if ($str[$i] == &#39; &#39;) {
                    $ptag[$k] = implode(&#39;&#39;, $ptag[$k]);
                    $k++;
                    break;
                }
                if ($str[$i] != &#39;>&#39;) {
                    $ptag[$k][] = $str[$i];
                    continue;
                } else {
                    $ptag[$k] = implode(&#39;&#39;, $ptag[$k]);
                    $k++;
                    break;
                }
            }
            $i++;
            continue;
        } else {
            //$re.=substr($str,$i,1);
            $word++;
            $i++;
        }
    }
    foreach ($etag as $val) {
        $key1 = array_search($val, $stag);
        if ($key1 !== false) unset($stag[$key]);
    }
    foreach ($stag as $key => $val) {
        if (in_array($val, array(
            &#39;br&#39;,
            &#39;img&#39;
        ))) unset($stag[$key1]);
    }
    array_reverse($stag);
    $ends = &#39;</&#39; . implode(&#39;></&#39;, $stag) . &#39;>&#39;;
    $re = substr($str, 0, $i) . $ends;
    if ($more) $re.= &#39;...&#39;;
    return $re;
}
?>

PHP截取字符串,生成文章摘要,我们在写BLOG时经常需要显示文章前一部分,但是又怕不恰当截断破坏封闭标签以造成整个文档结构破坏,代码如下:

<?php
function text_zhaiyao($text, $length) { //文章摘要生成函数  $test:内容 $length:摘要长度
    global $Briefing_Length;
    mb_regex_encoding("UTF-8");
    if (mb_strlen($text) <= $length) return $text;
    $Foremost = mb_substr($text, 0, $length);
    $re = "<(/?) 
    (P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI| 
    BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)";
    $Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|BR/i";
    $Stack = array();
    $posStack = array();
    mb_ereg_search_init($Foremost, $re, &#39;i&#39;);
    while ($pos = mb_ereg_search_pos()) {
        $match = mb_ereg_search_getregs();
        /* [Child-matching Formulation]:
        
        $matche[1] : A "/" charactor indicating whether current "<...>" Friction is
        Closing Part
        $matche[2] : Element Name.
        $matche[3] : Right > of a "<...>" Friction
        */
        if ($match[1] == "") {
            $Elem = $match[2];
            if (mb_eregi($Single, $Elem) && $match[3] != "") {
                continue;
            }
?>


本文地址:

转载随意,但请附上文章地址:-)

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools