タグを保持した HTML を含むテキストの切り詰め
チャレンジ
HTML タグが埋め込まれたテキストの切り詰め多くの場合、タグが不完全であるか、タグが正しく閉じられていません。 HTML 構造を保持しながらテキストを効果的に切り詰めるにはどうすればよいですか?
解決策: タグ認識切り詰め
HTML 構造を保持するには、次の情報を追跡する必要があります。開いたタグと閉じたタグを管理します。 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... }
使用例
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>");
注:
関数は UTF- 8エンコーディング。他のエンコーディングの場合は、切り捨てられる前に mb_convert_encoding を使用して UTF-8 に変換します。
以上がタグ構造を維持しながら HTML テキストを切り詰める方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。