> 백엔드 개발 > PHP 튜토리얼 > 태그를 깨지 않고 HTML 텍스트를 자르는 방법은 무엇입니까?

태그를 깨지 않고 HTML 텍스트를 자르는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-12 09:44:01
원래의
893명이 탐색했습니다.

How to Truncate HTML Text Without Breaking Tags?

태그를 끊지 않고 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]+)[^>]*>|&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));
}
로그인 후 복사

사용법:

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");
로그인 후 복사

위 내용은 태그를 깨지 않고 HTML 텍스트를 자르는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿