ホームページ >バックエンド開発 >PHPチュートリアル >タグ構造を維持しながら HTML テキストを切り詰める方法

タグ構造を維持しながら HTML テキストを切り詰める方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-13 00:04:011033ブラウズ

How to Truncate HTML Text while Preserving Tag Structure?

タグを保持した HTML を含むテキストの切り詰め

チャレンジ

HTML タグが埋め込まれたテキストの切り詰め多くの場合、タグが不完全であるか、タグが正しく閉じられていません。 HTML 構造を保持しながらテキストを効果的に切り詰めるにはどうすればよいですか?

解決策: タグ認識切り詰め

HTML 構造を保持するには、次の情報を追跡する必要があります。開いたタグと閉じたタグを管理します。 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...
}

使用例

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>");

注:

関数は UTF- 8エンコーディング。他のエンコーディングの場合は、切り捨てられる前に mb_convert_encoding を使用して UTF-8 に変換します。

以上がタグ構造を維持しながら HTML テキストを切り詰める方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。