2010-11-08 13 views
2

Certains formulaires HTML sont remplis par les utilisateurs en utilisant le copier & coller à partir de MSWord, dans les éditeurs FCK ou autres. Cela génère des tags méchants agaçant d'autres outils pour fonctionner correctement. Y a-t-il un moyen pour le serveur de nettoyer les paramètres entrants, afin que les balises HTML désagréables soient supprimées?Classe Java pour supprimer les balises HTML générées par MSWord

Bien sûr, les expressions régulières ne sont pas utiles, tant que l'utilisateur peut écrire quoi que ce soit.

Je veux dire à propos de la classe Java un peu spécialisée dans ce travail.

Par exemple, tout ceci pourrait être remplacé par une chaîne vide. FCKEditor a un bouton "coller depuis le mot" qui fonctionne très bien.

 
<p><!--[if gte mso 9]><xml> 
<w:WordDocument> 
<w:View>Normal</w:View> 
<w:Zoom>0</w:Zoom> 
<w:HyphenationZone>21</w:HyphenationZone> 
<w:PunctuationKerning /> 
<w:ValidateAgainstSchemas /> 
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> 
<w:IgnoreMixedContent>false</w:IgnoreMixedContent> 
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> 
<w:Compatibility> 
<w:BreakWrappedTables /> 
<w:SnapToGridInCell /> 
<w:WrapTextWithPunct /> 
<w:UseAsianBreakRules /> 
<w:DontGrowAutofit /> 
</w:Compatibility> 
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> 
</w:WordDocument> 
</xml><![endif]--><!--[if gte mso 9]><xml> 
<w:LatentStyles DefLockedState="false" LatentStyleCount="156"> 
</w:LatentStyles> 
</xml><![endif]--><!--[if gte mso 10]> 
<style> 
/* Style Definitions */ 
table.MsoNormalTable 
{mso-style-name:"Tabla normal"; 
mso-tstyle-rowband-size:0; 
mso-tstyle-colband-size:0; 
mso-style-noshow:yes; 
mso-style-parent:""; 
mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 
mso-para-margin:0cm; 
mso-para-margin-bottom:.0001pt; 
mso-pagination:widow-orphan; 
font-size:10.0pt; 
font-family:"Times New Roman"; 
mso-ansi-language:#0400; 
mso-fareast-language:#0400; 
mso-bidi-language:#0400;} 
</style> 
<![endif]--></p> 
+0

Salut. J'ai le même problème Avez-vous trouvé la solution pour le problème ci-dessus? – ashishjmeshram

+2

Salut, j'ai finalement utilisé javax.swing.text.html.parser.ParserDelegator.parse et fonctionne bien –

+0

Salut. Comment avez-vous utilisé javax.swing.text.html.parser.ParserDelegator.parse? Pouvez-vous s'il vous plaît coller le code? J'ai toujours ce problème? – ashishjmeshram

Répondre

0

Utilisez https://code.google.com/p/owasp-java-html-sanitizer/

import org.owasp.html.PolicyFactory; 
import org.owasp.html.Sanitizers; 

pour construire un html accepter la seule politique. Cela va se débarrasser de tout sauf les choses que vous dites d'inclure. Non seulement cela supprimera les déchets de Word Html, mais il protégera aussi votre entrée html de xss. Le problème avec JTidy est qu'il peut être assez lent. Le désinfectant html est incroyablement rapide en comparaison.

1

Pourriez-vous demander à vos utilisateurs d'utiliser cette fonctionnalité?

+0

Bien, mais j'ai besoin d'une solution du serveur tant que d'autres widgets peuvent être appliqués. Et mes utilisateurs n'utiliseront pas le bouton, lol –

1

Vous pouvez essayer JTidy. C'est un port Java de HTMLtidy, qui peut faire le type de nettoyage que vous recherchez. Caveat emptor: Je n'ai pas utilisé JTidy et je n'ai aucune idée de comment ça marche.

0

La dernière version de CKEditor prend en charge la détection automatique lorsque vous collez à partir de Word, ce qui signifie qu'ils n'auraient pas besoin d'utiliser le bouton, même si le bouton est présent. il détecterait le collage à partir du mot et offrirait de le nettoyer ou de le convertir en texte direct. Docx4j produit du HTML propre, qui est spécifiquement conçu pour faire un aller-retour via CKEditor.