gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:17:31 28 4
gpt4 key购买 nike

我需要将 " 更改为 \" 并使用 JSTL replace函数在输入标记中使用字符串,例如:

<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: Encountered " "}" "} "" at line 1, column 32. Was expecting one of: "." ... ")" ... "[" ... "," ... ">" ... "gt" ... "<" ... "lt" ... ">=" ... "ge" ... "<=" ... "le" ... "==" ... "eq" ... "!=" ... "ne" ... "&&" ... "and" ... "||" ... "or" ... "*" ... "+" ... "-" ... "/" ... "div" ... "%" ... "mod" ...

我该怎么做?

更新

我错过了替换函数的右括号。正确的是这个带有右括号的:

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

更新2

我发现在发布文本时,使用 \ 并不是一个好主意,因为这个原因 why can't use \" in HTML input tag? 。代码应该是这样的:

<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)}">

###另请参阅:

关于java - 如何在 JSTL 函数/EL 中转义双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60339339/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com