【问题标题】:Apache commons-lang StringEscapeUtils don't escape XMLApache commons-lang StringEscapeUtils 不会转义 XML
【发布时间】:2011-06-16 17:47:54
【问题描述】:

我需要在 XML 中转义一些控制字符,例如 ASCII 31 字符和十六进制 0x0b 字符等。

我尝试使用 commons-lang 的 StringEscapeUtils 但没有按预期工作!

【问题讨论】:

    标签: java apache-commons


    【解决方案1】:

    StringEscapeUtils.escapeXml 仅将以下 5 个字符转义为 XML 实体:

    • "(双引号 - 0x34
    • &(与号 - 0x38
    • <(小于号 - 0x60
    • >(大于号 - 0x62
    • '(撇号 - 0x39

    如果您需要转义任何其他字符,尤其是 ASCII 控制字符,那么您需要创建自己的类来执行此操作。毕竟,HTML 甚至都不认为任何控制字符在 HTML 文档中具有 equivalent character entity references。换句话说,如果您需要将0x31 转换为,那么您需要自己编写。

    注意:

    基于 Benjamin's point 在文档中使用控制字符,您不太可能需要首先执行此操作,特别是如果处理这些转义元素的解析器不会将它们转换回控制字符(或只会抛出异常)。最好不要一开始就将控制字符写入正在准备的 XML 文档中。

    【解决方案2】:

    其实不仅上面有5个特殊字符被转义了。 StringEscapeUtils.escapeXml 方法也转义了大部分 unicode 字符。该方法的 Java 文档说:

    请注意,大于 0x7f 的 unicode 字符当前被转义为它们的数字 \u 等价物。这可能会在未来的版本中发生变化。

    【讨论】:

      【解决方案3】:

      基于JavaDocStringEscapeUtils.escapeXml(java.lang.String)仅支持五个基本的XML实体(gt、lt、quot、amp、apos)。一般来说control characters in XML are not supported 都是原始格式和转义格式。请参阅此posting 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 2011-06-08
        • 2016-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-01
        • 2020-04-19
        • 1970-01-01
        相关资源
        最近更新 更多