2009-06-11 7 views
2

J'ai une chaîne qui peut inclure des balises br ou span .../span ou d'autres caractères/entités HTML. Je veux un moyen robuste de dépouiller tout cela et d'obtenir les caractères UTF-8 restants. Cela devrait être multi-plateforme, idéalement.C++: Supprimer tout le formatage HTML de la chaîne?

Quelque chose comme ça serait idéal:

http://snipplr.com/view/15261/python-decode-and-strip-html-entites-to-unicode/

mais supprime également les balises. Voulez-vous simplement supprimer les éléments ou convertir le HTML en texte brut?

Répondre

0

Option 1:

Si vous voulez simplement supprimer toutes les occurences de et vous pouvez utiliser une recherche regex et remplacer.

Option 2:

Si ce que vous êtes vraiment essayer de faire est de prendre une page qui a le formatage et le convertir en texte brut, la façon la plus simple et plus robuste que je peux penser est d'utiliser un navigateur, ou un moteur de navigateur, pour réellement analyser le HTML et en extraire le texte. IOW, cela équivaut à copier une page Web du navigateur dans le presse-papiers, puis à le coller dans le bloc-notes.

2

À quel point vos exigences sont-elles strictes? Un simple FSA à deux états devrait faire. Commencez dans l'état READCHAR. Chaque fois que vous lisez un '<' dans cet état, passez à l'état READTAG; sinon, écrivez le caractère dans votre chaîne de résultat. Chaque fois que vous êtes dans l'état READTAG et lisez un '>', revenez à l'état READCHAR.

Édition: Oups. Manqué la partie d'à propos des entités. Vous aurez également un état de READENTITY pour cela. Lorsque vous en sortez, vous pouvez également convertir le code en caractère UTF-8 correspondant.

+0

A noter, plusieurs états sont nécessaires, car les attributs peuvent contenir ">". – strager

+0

C'est vrai, c'est pourquoi j'ai demandé à quel point ses exigences sont strictes. Un '>' dans une étiquette est assez improbable mais cela pourrait certainement arriver. Similairement, l'algorithme devra être plus complexe si vous devez traiter avec du HTML potentiellement mal formé ou prendre des mesures spéciales pour certains tags. –

+0

Le PO dit «robuste», ce qui signifie probablement «fonctionne comme un humain, en supposant qu'il comprenne parfaitement la norme dans tous les cas». Donc ">" dans un attribut devrait probablement être manipulé. – strager

1

Je ne suis pas clair sur ce que vous voulez.

Entrée: Ceci est une chaîne

du texte & sur de nombreuses lignes "

Si cette sortie:

1) This is a string <br> <br /> of text & on many lines " (Replace &amp; with & and &quot; with ") 
2) This is a string of text & on many lines " 
+0

Il veut le contraire. Voir la question: "supprimer tout le formatage HTML". – strager

+0

"Quelque chose comme ceci serait idéal: http://snipplr.com/view/15261/python-decode-and-strip-html-entites-to-unicode/ mais cela enlève aussi les étiquettes." Le mot mais me fait penser qu'il ne veut pas enlever les étiquettes. – chocojosh

Questions connexes