Heim  >  Artikel  >  Backend-Entwicklung  >  Wie schneide ich HTML-Text ab, ohne Tags zu beschädigen?

Wie schneide ich HTML-Text ab, ohne Tags zu beschädigen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 09:44:01822Durchsuche

How to Truncate HTML Text Without Breaking Tags?

HTML-Text abschneiden, ohne Tags zu zerstören

Beim Abschneiden von Text, der HTML enthält, ist es wichtig sicherzustellen, dass Tags ordnungsgemäß gehandhabt werden, um ein Zerbrechen der Tags zu vermeiden Layout und Inhaltsfluss.

Das Problem:

In Bei herkömmlichen Methoden werden Tags in den abgeschnittenen Text eingefügt, was zu unvollständigen oder fehlerhaften Tags führt. Dies kann die Formatierung stören, verwirrende Inhalte erzeugen und möglicherweise Probleme mit der Tidy-Bereinigung auslösen.

Die Lösung:

Um dieses Problem zu beheben, ist es notwendig, den HTML-Code zu analysieren und Verfolgen Sie offene Tags. Durch das Schließen offener Tags vor dem Abschneiden des Textes kann die Tag-Integrität sichergestellt werden.

PHP-Implementierung:

Der folgende PHP-Code zeigt, wie man HTML-Text unter Beibehaltung des Tags abschneidet Struktur:

function printTruncated($maxLength, $html, $isUtf8=true)
{
    // Initialization
    $printedLength = 0;
    $position = 0;
    $tags = array();

    // Regex pattern for matching HTML tags and entities
    $re = $isUtf8
        ? '{</?([a-z]+)[^>]*>|&amp;#?[a-zA-Z0-9]+;|[\x80-\xFF][\x80-\xBF]*}'
        : '{</?([a-z]+)[^>]*>|&amp;#?[a-zA-Z0-9]+;}';

    // Iterate through the HTML
    while ($printedLength < $maxLength &amp;&amp; preg_match($re, $html, $match, PREG_OFFSET_CAPTURE, $position))
    {
        // Extract tag and tag position
        list($tag, $tagPosition) = $match[0];

        // Print text leading up to the tag
        $str = substr($html, $position, $tagPosition - $position);
        $printedLength += strlen($str);

        // Handle the tag
        if ($tag[0] == '&amp;' || ord($tag) >= 0x80)
        {
            // Pass entity or UTF-8 sequence unchanged
            print($tag);
            $printedLength++;
        }
        else
        {
            if ($tag[1] == '/')
            {
                // Closing tag
                assert(array_pop($tags) == $match[1][0]); // Check for nested tags
                print($tag);
            }
            else if ($tag[strlen($tag) - 2] == '/')
            {
                // Self-closing tag
                print($tag);
            }
            else
            {
                // Opening tag
                print($tag);
                $tags[] = $match[1][0];
            }
        }

        // Continue after the tag
        $position = $tagPosition + strlen($tag);
    }

    // Print any remaining text
    if ($position < strlen($html))
        print(substr($html, $position, $maxLength - $printedLength));

    // Close open tags
    while (!empty($tags))
        printf('</%s>', array_pop($tags));
}

Verwendung:

printTruncated(10, '<b>&amp;lt;Hello&amp;gt;</b> <img src="world.png" alt="" /> world!'); print("\n");
printTruncated(10, '<table><tr><td>Heck, </td><td>throw</td></tr><tr><td>in a</td><td>table</td></tr></table>'); print("\n");
printTruncated(10, "<em><b>Hello</b>&amp;#20;w\xC3\xB8rld!</em>"); print("\n");

Das obige ist der detaillierte Inhalt vonWie schneide ich HTML-Text ab, ohne Tags zu beschädigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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