【问题标题】:What is the difference between escapeXml and escapeHtml?escapeXml 和 escapeHtml 有什么区别?
【发布时间】:2023-04-09 22:56:01
【问题描述】:

我想转义 JSP 页面中的字符。 escapeXmlescapeHtml哪个更合适?

【问题讨论】:

    标签: html xml jsp escaping


    【解决方案1】:

    由于您要将 HTML 发送回消费者,我会选择 escapeHtml

    escapeXml 仅支持转义五个基本 XML 实体(gt、lt、quot、amp、apos),而escapeHtml 支持转义所有已知的HTML 4.0 entities

    【讨论】:

    • 你上面的解决方案非常清楚地指出“在 JSP 中没有像 escapeHtml 这样的东西”。不确定谁是正确的,但我肯定需要转义 XML 和 HTML 字符,这意味着我真的需要转义 HTML。
    【解决方案2】:

    它们是为不同的目的而设计的,HTML 有很多 XML 没有的实体。 XML 只有 5 个转义:

    &lt; represents "<"
    &gt; represents ">"
    &amp; represents "&"
    &apos; represents '
    &quot; represents "
    

    虽然 HTML 有负载 - 想想 &amp;nbsp; &amp;copy; 等。这些 HTML 代码在 XML 中无效,除非您在标题中包含定义。数字代码(如版权符号的&amp;#169;)在两者中均有效。

    【讨论】:

    • 啊,你添加了 JSP 标签 - 我想知道你来自哪种语言。
    【解决方案3】:

    假设您指的是公共 StringEscapeUtils,escapeXml 仅处理 &lt;&gt;"'&amp;escapeHtml 涵盖更丰富的字符集。

    【讨论】:

    • 为什么需要覆盖它们?转义提到的 5 个字符就足够了。
    【解决方案4】:

    在 JSP 中没有 escapeHtml 这样的东西。你通常使用&lt;c:out escapeXml="true"&gt;(它已经默认为true,所以你可以省略它)或fn:escapeXml()在JSP中转义HTML。

    例如

    <c:out value="Welcome, ${user.name}" />
    <input name="foo" value="${fn:escapeXml(param.foo)}" />
    

    它会将它们作为 XML 实体转义,在纯 HTML 中也可以正常工作。它们只是字面上称为 XML 实体,因为 HTML 实体在 XML 中是无效的。

    另见:

    【讨论】:

    • “在 JSP 中转义 HTML”是指“在 EL 中转义 HTML”,对吧?
    • @DavidBalažic:“使用 EL 在 JSP 中转义 HTML”。 HTML 在 EL 中没有害处。
    • 我的意思是这个函数是一个EL函数,不能在EL之外使用。请注意,我只是在谈论fn:escapeXml(我的第一条评论措辞很糟糕,因为我误读了你的句子)。所以:c:out 用于 JSP,而fn:escapeXml 用于 EL(当然,最终也可以是 HTML)。很抱歉造成混乱。
    • @DavidBalažic: c:out 是在 JSP 中使用 JSTL 转义 HTML。
    猜你喜欢
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    • 2013-08-19
    相关资源
    最近更新 更多