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]+)[^>]*>|&#?[a-zA-Z0-9]+;|[\x80-\xFF][\x80-\xBF]*}' : '{</?([a-z]+)[^>]*>|&#?[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>&lt;Hello&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>&#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!