我想在JSP页面中转义字符。哪个更适合,escapeXml
还是escapeHtml
?
它们被设计用于不同的目的,HTML具有许多XML没有的实体。XML只有5个转义字符:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
尽管HTML有许多特殊字符 - 比如
,©
等等。这些HTML代码在XML中无效,除非你在头部包含定义。数字代码(例如版权符号的©
)在两种语言中都是有效的。
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)。对于造成的困惑,我感到很抱歉。 - David Balažic由于您要将HTML发送回消费者,因此我建议使用escapeHtml
。
escapeXml
仅支持转义五个基本的XML实体(gt、lt、quot、amp、apos),而escapeHtml
支持转义所有已知的HTML 4.0实体。