Bagaimana untuk Memotong Teks HTML Tanpa Memecahkan Teg?

Mary-Kate Olsen
Lepaskan: 2024-11-12 09:44:01
asal
858 orang telah melayarinya

How to Truncate HTML Text Without Breaking Tags?

Memotong Teks HTML tanpa Memecah Teg

Apabila memotong teks yang mengandungi HTML, adalah penting untuk memastikan bahawa teg dikendalikan dengan betul untuk mengelakkan pecahnya reka letak dan aliran kandungan.

Masalahnya:

Dalam kaedah tradisional, teg disertakan dalam teks yang dipotong, mengakibatkan teg tidak lengkap atau rosak. Ini boleh mengganggu pemformatan, mencipta kandungan yang mengelirukan dan berpotensi mencetuskan isu Pembersihan Kemas.

Penyelesaian:

Untuk menangani masalah ini, anda perlu menghuraikan HTML dan menjejaki tag terbuka. Dengan menutup teg terbuka sebelum memotong teks, seseorang boleh memastikan integriti teg.

Pelaksanaan PHP:

Kod PHP berikut menunjukkan cara memotong teks HTML sambil mengekalkan struktur teg :

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));
}
Salin selepas log masuk

Penggunaan:

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");
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Memotong Teks HTML Tanpa Memecahkan Teg?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan