Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java类删除MSWord生成的HTML标记_Java_Html_Ms Word - Fatal编程技术网

Java类删除MSWord生成的HTML标记

Java类删除MSWord生成的HTML标记,java,html,ms-word,Java,Html,Ms Word,某些HTML表单由用户使用MSWord、FCK编辑器或其他工具中的“复制和粘贴”来填充。 这会生成讨厌的标签,使其他工具无法正常工作。 服务器是否有办法清除传入的参数,从而删除讨厌的HTML标记 当然,正则表达式并不有用,只要用户可以编写任何内容 我是说Java类在这项工作中有点专业化 例如,所有这些都可能被一个空字符串替换 <p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Nor

某些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>

FCKEditor有一个“从word粘贴”按钮,效果非常好。
您能让您的用户使用此功能吗?

您可以试试。这是一个HTMLtidy的Java端口,它可以完成您正在寻找的清理类型。注意:我没有使用JTidy,也不知道它的工作情况如何。

最新版本的CKEditor支持从word粘贴时自动检测,这意味着他们不必使用按钮,即使按钮在那里。它将检测word中的粘贴,并提供清理或将其转换为纯文本的功能。

docx4j生成干净的HTML,专门用于通过CKEditor往返。

使用

构建html仅接受策略。除了你说的要包含的东西之外,这将去除一切。这不仅可以删除单词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消毒剂的速度非常快。

不错,但只要可以应用其他小部件,我就需要服务器提供解决方案。我的用户不会用这个按钮,lolHi。我也遇到了同样的问题,您找到了上述问题的解决方案了吗?您好,我最终使用了javax.swing.text.html.parser.ParserDelegator.parse和works fineHi。您是如何使用javax.swing.text.html.parser.ParserDelegator.parse的?你能粘贴代码吗?我仍然有这个问题?我用了这个:
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);