【发布时间】:2023-04-09 22:56:01
【问题描述】:
我想转义 JSP 页面中的字符。 escapeXml或escapeHtml哪个更合适?
【问题讨论】:
我想转义 JSP 页面中的字符。 escapeXml或escapeHtml哪个更合适?
【问题讨论】:
由于您要将 HTML 发送回消费者,我会选择 escapeHtml。
escapeXml 仅支持转义五个基本 XML 实体(gt、lt、quot、amp、apos),而escapeHtml 支持转义所有已知的HTML 4.0 entities。
【讨论】:
它们是为不同的目的而设计的,HTML 有很多 XML 没有的实体。 XML 只有 5 个转义:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
虽然 HTML 有负载 - 想想 &nbsp; &copy; 等。这些 HTML 代码在 XML 中无效,除非您在标题中包含定义。数字代码(如版权符号的&#169;)在两者中均有效。
【讨论】:
假设您指的是公共 StringEscapeUtils,escapeXml 仅处理 <>"'& 而escapeHtml 涵盖更丰富的字符集。
【讨论】:
在 JSP 中没有 escapeHtml 这样的东西。你通常使用<c:out escapeXml="true">(它已经默认为true,所以你可以省略它)或fn:escapeXml()在JSP中转义HTML。
例如
<c:out value="Welcome, ${user.name}" />
<input name="foo" value="${fn:escapeXml(param.foo)}" />
它会将它们作为 XML 实体转义,在纯 HTML 中也可以正常工作。它们只是字面上称为 XML 实体,因为 HTML 实体在 XML 中是无效的。
【讨论】:
fn:escapeXml(我的第一条评论措辞很糟糕,因为我误读了你的句子)。所以:c:out 用于 JSP,而fn:escapeXml 用于 EL(当然,最终也可以是 HTML)。很抱歉造成混乱。