Maison  >  Article  >  développement back-end  >  Comment tronquer le texte HTML tout en préservant la structure des balises ?

Comment tronquer le texte HTML tout en préservant la structure des balises ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-13 00:04:01974parcourir

How to Truncate HTML Text while Preserving Tag Structure?

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]+)[^>]*>|&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...
}

Exemple d'utilisation

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn