Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Memotong Teks HTML sambil Memelihara Struktur Tag?

Bagaimana untuk Memotong Teks HTML sambil Memelihara Struktur Tag?

Linda Hamilton
Linda Hamiltonasal
2024-11-13 00:04:011033semak imbas

How to Truncate HTML Text while Preserving Tag Structure?

Memangkas Teks Yang Mengandungi HTML dengan Pemeliharaan Teg

Cabaran

Memotong teks dengan teg HTML terbenam selalunya membawa kepada teg yang tidak lengkap atau ditutup dengan tidak betul. Bagaimanakah kita boleh memotong teks dengan berkesan sambil mengekalkan struktur HTML?

Penyelesaian: Pemangkasan Tag-Aware

Untuk mengekalkan struktur HTML, kita perlu menjejaki dan menguruskan tag terbuka dan tertutup. Berikut ialah pelaksanaan PHP:

function printTruncated($maxLength, $html, $isUtf8 = true)
{
    $printedLength = 0;
    $position = 0;
    $tags = [];

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

    while ($printedLength < $maxLength && preg_match($re, $html, $match, PREG_OFFSET_CAPTURE, $position))
    {
        list($tag, $tagPosition) = $match[0];

        $str = substr($html, $position, $tagPosition - $position);
        
        # More code...
        
        # Continue after the tag.
        $position = $tagPosition + strlen($tag);
    }

    # More code...
}

Contoh Penggunaan

printTruncated(10, '<b>&amp;lt;Hello&amp;gt;</b> <img src="world.png" alt="" /> world!');

printTruncated(10, '<table><tr><td>Heck, </td><td>throw</td></tr><tr><td>in a</td><td>table</td></tr></table>');

printTruncated(10, "<em><b>Hello</b>&amp;#20;w\xC3\xB8rld!</em>");

Nota:

Fungsi ini menganggap UTF- 8 pengekodan. Untuk pengekodan lain, gunakan mb_convert_encoding untuk menukar kepada UTF-8 sebelum pemotongan.

Atas ialah kandungan terperinci Bagaimana untuk Memotong Teks HTML sambil Memelihara Struktur Tag?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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