Maison >développement back-end >tutoriel php >Comment tronquer du texte avec du HTML intégré sans casser les balises ?

Comment tronquer du texte avec du HTML intégré sans casser les balises ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-10 04:37:02802parcourir

How to Truncate Text with Embedded HTML Without Breaking Tags?

Tronquage de texte avec HTML intégré

Lorsque vous traitez du texte contenant des balises HTML, il est essentiel d'assurer une manipulation appropriée lors de la troncature pour éviter de casser des balises ou afficher du contenu invalide. Voici comment tronquer du texte tout en préservant l'intégrité du HTML :

Implémentation PHP :

La fonction PHP suivante utilise des expressions régulières pour analyser le HTML et maintient une pile de fichiers ouverts tags :

function printTruncated($maxLength, $html, $isUtf8 = true) { ... }

Cette fonction analyse l'entrée HTML, identifiant les balises et les entités de caractères. Il garantit que les balises sont correctement fermées et compte les entités de caractères comme des caractères uniques. Cette approche garantit que la troncature se produit à un point valide sans casser aucune structure HTML.

Exemple d'utilisation :

printTruncated(10, '<b><Hello&amp;gt;</b> <img src="world.png" alt="" /> world!'); // Outputs: 'Hello<b></b> <img src="world.png" alt="" />'

Implémentation Python :

Les bibliothèques d'analyse HTML comme BeautifulSoup peuvent vous aider dans cette tâche Python :

from bs4 import BeautifulSoup, NavigableString

def truncate_html(text, max_length):
    soup = BeautifulSoup(text, 'lxml')
    truncated = soup.new_tag("div")
    tail = soup.new_string('')

    node_len = 0
    for node in soup.children:
        if isinstance(node, NavigableString):
            node_len += len(node)
            if node_len <= max_length:
                truncated.append(node)
            else:
                tail.append(node.string[:max_length - node_len])
                break
        else:
            node_len += len(str(node))
            truncated.append(node)
        
    return str(truncated) + str(tail)

Exemple d'utilisation :

print(truncate_html('<b><Hello&amp;gt;</b> <img src="world.png" alt="" /> world!', 10)) # Outputs: 'Hello<b></b> <img src="world.png" alt="" />'

Conclusion :

En analysant et en gérant les balises HTML pendant troncature, ces méthodes garantissent que le texte résultant conserve sa structure prévue et la validité de son contenu.

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