Tronquer du texte contenant du HTML avec préservation des balises
Défi
Tronquer du texte avec des balises HTML intégrées conduit souvent à des balises incomplètes ou mal fermées. Comment pouvons-nous tronquer le texte efficacement tout en préservant la structure HTML ?
Solution : troncature basée sur les balises
Pour préserver la structure HTML, nous devons garder une trace et gérer les balises ouvertes et fermées. Voici une implémentation 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... }
Exemple d'utilisation
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>");
Remarque :
La fonction suppose UTF- 8 encodage. Pour les autres encodages, utilisez mb_convert_encoding pour convertir en UTF-8 avant la troncature.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!