如何在JSTL函数/ EL中转义双引号?

我需要改变",以\"与JSTL替换功能使用的字符串输入标签,如:

<input type="hidden" name="text" size="40" value="${text}">

如果${text}具有",则HTML将被破坏。

所以我尝试了

<input type="hidden" name="text" size="40" value="${fn:replace(text, "\"", "\\\""}">

<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '\"'}">

但是没有用。该页面出现如下错误

org.apache.el.parser.ParseException:在第1行第32列遇到““}”“}”“。期望以下其中之一:”。…“)”

…“ [” …“,” …“>” …“ gt” …“ <” …“ lt” …“> =”。 ..“ ge” …“ <=”

…“ le” …“ ==” …“ eq” …“!=” …“ ne” …“ &&” …“和” …“ ||” …“或”

…“ *” …“ +” …“-” …“ /” …“ div” …“%” …“ mod” .. 。

我怎样才能做到这一点?

我错过了替换功能的详细介绍。正确的人就是这个亲密的人:

<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '\"')}">

我发现在发布文本时,使用\不是一个好主意,因为这个原因为什么不能在HTML输入标签中使用\“?代码应该像这样:

<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '&quot;')}">

回答:

它不起作用,因为\是Java字符串中的转义字符。要从字面上表示它,您需要\再次将其转义。另外,"是EL中的特殊字符,您还需要对其进行转义以从字面上表示它。因此,正确的语法应该是:

<input type="hidden" name="text" size="40" value="${fn:replace(text, '\"', '\\\"'}">

但是,您 实际上 应该使用它fn:escapeXml()来防止XSS。它不仅转义了引号,而且还转义了其他字符。

<input type="hidden" name="text" size="40" value="${fn:escapeXml(text)}">

也可以看看:

  • JSP / Servlet Web应用程序中的XSS预防

以上是 如何在JSTL函数/ EL中转义双引号? 的全部内容, 来源链接: utcz.com/qa/406465.html

回到顶部