태그를 끊지 않고 HTML 텍스트 자르기
HTML이 포함된 텍스트를 자를 때 태그가 깨지지 않도록 태그를 올바르게 처리하는 것이 중요합니다. 레이아웃 및 콘텐츠 흐름.
문제:
기존 방법에서는 잘린 텍스트에 태그가 포함되어 태그가 불완전하거나 깨졌습니다. 이로 인해 형식이 혼란스러워지고 혼란스러운 콘텐츠가 생성되며 잠재적으로 Tidy 정리 문제가 발생할 수 있습니다.
해결책:
이 문제를 해결하려면 HTML을 구문 분석하고 열린 태그를 추적하세요. 텍스트를 자르기 전에 열린 태그를 닫으면 태그 무결성을 보장할 수 있습니다.
PHP 구현:
다음 PHP 코드는 태그 구조를 유지하면서 HTML 텍스트를 자르는 방법을 보여줍니다. :
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)); }
사용법:
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");
위 내용은 태그를 깨지 않고 HTML 텍스트를 자르는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!