【问题标题】:Java class to remove HTML tags generated by MSWord用于删除 MSWord 生成的 HTML 标记的 Java 类
【发布时间】:2011-05-06 22:42:01
【问题描述】:

某些 HTML 表单由用户使用 MSWord、FCK 编辑器或其他编辑器中的复制和粘贴来填写。 这会生成讨厌的标签,使其他工具无法正常工作。 有没有办法让服务器清理传入的参数,从而去除讨厌的 HTML 标签?

当然,正则表达式是没有用的,只要用户可以写什么就行。

我的意思是 Java 类有点专门从事这项工作。

Par 示例,所有这些都可能被替换为 void 字符串。

【问题讨论】:

  • 嗨。我也遇到了同样的问题你找到解决上述问题的方法了吗?
  • 嗨,我终于用 javax.swing.text.html.parser.ParserDelegator.parse 并且工作正常
  • 嗨。你是如何使用 javax.swing.text.html.parser.ParserDelegator.parse 的?你能粘贴代码吗?我还有这个问题吗?

标签: java html ms-word


【解决方案1】:

FCKEditor 有一个“从单词粘贴”按钮,效果很好。 您能否要求您的用户使用此功能?

【讨论】:

  • 很好,但是只要可以应用其他小部件,我就需要来自服务器的解决方案。而且我的用户不会使用该按钮,哈哈
【解决方案2】:

你可以试试JTidy。它是 HTMLtidy 的 Java 端口,可以执行您正在寻找的清理类型。警告购买者:我没有使用过 JTidy,也不知道它的效果如何。

【讨论】:

    【解决方案3】:

    使用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 sanitizer 的速度非常快。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-13
          • 2015-08-09
          • 2011-06-05
          相关资源
          最近更新 更多