Java类:去除由MSWord生成的HTML标签

3
一些HTML表单是由用户使用从MSWord,FCK编辑器或其他工具中复制粘贴填写的。这会生成烦人的标签,影响其他工具的正常工作。服务器是否有一种方法可以清除传入参数,以便移除烦人的HTML标签?
当然,正则表达式是无用的,因为用户可以写任何内容。我的意思是关于Java类这种专门处理这个工作的。
例如,所有这些都可以被一个空字符串所取代。
<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>

嗨,我也遇到了同样的问题。你找到上述问题的解决方案了吗? - ajm
2
嗨,我最终使用了javax.swing.text.html.parser.ParserDelegator.parse,并且运行良好。 - Llistes Sugra
你好。你是如何使用javax.swing.text.html.parser.ParserDelegator.parse的?能否请你粘贴代码?我仍然遇到了那个问题。 - ajm
我使用了这个:https://dev59.com/UXVC5IYBdhLWcg3wnCaA - Llistes Sugra
5个回答

1
FCKEditor有一个非常好用的“从Word粘贴”按钮。 你能否请你的用户使用这个功能呢?

不错,但我需要一个来自服务器的解决方案,以便可以应用其他小部件。而且我的用户不会使用按钮,哈哈 - Llistes Sugra

1
你可以尝试使用JTidy。它是HTMLtidy的Java移植版,可以进行你所需的清理操作。但请注意:我没有使用过JTidy,也不知道它的工作效果如何。

0

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

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

构建一个仅接受特定内容的HTML策略。这将除去除了你指定要包含的内容以外的所有东西。这不仅可以清除Word HTML垃圾,还可以保护你的HTML输入免受XSS攻击。

PolicyFactory policy = (new HtmlPolicyBuilder().allowElements("table", "tr", "td", "th").allowAttributes("style").globally()).toFactory();
        policy = policy.and(Sanitizers.FORMATTING).and(Sanitizers.BLOCKS).and(Sanitizers.IMAGES).and(Sanitizers.LINKS);

String safeHtml = policy.sanitize(html);

JTidy的问题在于它可能会非常慢。相比之下,HTML清理器速度非常快。


0

CKEditor 的最新版本支持从 Word 粘贴时的自动检测,这意味着用户无需使用按钮,即使按钮存在。它会检测来自 Word 的粘贴内容并提供清理或转换为纯文本的选项。


0

docx4j 生成干净的 HTML,旨在通过 CKEditor 实现往返转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接