如何在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, '"', '"')}">
回答:
它不起作用,因为\
是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