某些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>
答案 0 :(得分:1)
FCKEditor有一个“从word粘贴”按钮,效果很好。 您能否要求您的用户使用此功能?
答案 1 :(得分:1)
您可以尝试JTidy。它是HTMLtidy的Java端口,可以进行您正在寻找的清理类型。警告:我没有使用过JTidy,我也不知道它有多好用。
答案 2 :(得分:0)
当您从word粘贴时,最新版本的CKEditor支持自动检测,这意味着即使按钮在那里,他们也不必使用该按钮。它会检测从单词粘贴并提供清理它或将其转换为直接文本。
答案 3 :(得分:0)
docx4j生成干净的HTML,专门用于通过CKEditor进行往返。
答案 4 :(得分: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清洁剂的速度非常快。