Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Memotong Teks HTML Tanpa Memecahkan Teg?
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]+)[^>]*>|&#?[a-zA-Z0-9]+;|[\x80-\xFF][\x80-\xBF]*}' : '{</?([a-z]+)[^>]*>|&#?[a-zA-Z0-9]+;}'; // Iterate through the HTML while ($printedLength < $maxLength && 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] == '&' || 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)); }
Penggunaan:
printTruncated(10, '<b>&lt;Hello&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>&#20;w\xC3\xB8rld!</em>"); print("\n");
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!