2009-12-31 7 views
1

Dans mon application Web, j'ai l'intention de raccourcir une longue chaîne de texte au format HTML si elle comporte plus de 300 caractères, puis d'afficher les 300 caractères et un lien Read More sur la page.Texte HTML raccourci et balises mal formées

La question que je suis tombé est lorsque la limite de 300 caractères est atteinte à l'intérieur d'une balise HTML, par exemple: (chercher ICI)

<a hreHERE="somewhere">link</a> 
<a hre="somewhere">liHEREnk</a> 

Lorsque cela se produit, la page entière pourrait devenir mal formaté parce que tout après le HERE dans l'exemple précédent est supprimé et la balise HTML est maintenue ouverte. Je pense à utiliser CSS pour cacher tout débordement au-delà d'une certaine limite et créer le lien "Lire la suite" si le texte est au-delà d'un certain nombre, mais cela impliquerait d'inclure tout le texte sur la page.

J'ai également pensé à scinder le texte à . pour m'assurer qu'il est scindé à la fin d'une phrase, mais cela voudrait dire que j'inclurais plus de caractères que nécessaire.

Existe-t-il un meilleur moyen d'y parvenir?

Remarque: Je n'ai pas spécifié de langage côté serveur car il s'agit plutôt d'une question générale, mais j'utilise ASP.NET/C#.

Répondre

4

Extrayez le texte en clair du code HTML et affichez-le. Il y a des bibliothèques (comme les HTML Agility Pack pour .NET) qui rendent cela facile, et ce n'est pas trop difficile de le faire vous-même avec un analyseur XML. Essayer de réparer un extrait HTML tronqué est une cause perdante.

1

Une option que je peux penser est de couper à 300 caractères et assurez-vous que le dernier indice de '<' est inférieur au dernier indice de '>'. Si c'est le cas, tronquez la chaîne juste avant la dernière instance de '>', puis utilisez une bibliothèque comme tidy html pour corriger les balises qui sont orphelines (comme le </a > dans l'exemple).

Cependant, il y a des problèmes. Une chose étant s'il y a 300 caractères vaut rien d'autre que HTML - votre résumé sera affiché comme vide.

Si vous n'avez pas besoin du code HTML à afficher, il est beaucoup plus simple d'extraire le texte brut et de l'utiliser à la place.

EDIT: Ajouté en utilisant quelque chose comme hidrel tidy pour les balises orphelines. La réponse originale n'a résolu la chose coupante qu'au milieu d'une étiquette d'ouverture/fermeture.

Questions connexes