如何在 JSTL 函数/EL 中转义双引号?
我需要使用 更改为 \"
fn/replace.fn.html" rel="noreferrer">JSTL 替换 函数在输入标记中使用字符串,例如:
<input type="hidden" name="text" size="40" value="${text}">
如果 ${text}
具有 "< /code>,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”... “<” ... “它”... “>=”... “格”... “<=”... “勒”... “==”... “当量”... “!=”... “讷”... “&&” ... “和” ... “||” ... “或者” ... “*”... “+”... “——”…… “/”... “div”... “%”... “模组”...
我该怎么做?
更新
我错过了替换函数的右括号。正确的一个是这个带有闭括号的:
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '\"')}">
Update2
我发现在发布文本时,使用 \
并不是一个好主意,因为这个原因 为什么不能在 HTML 输入标记中使用 \" ? 代码应该是这样的。 :
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '"')}">
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它不起作用,因为
\
是 Java 字符串中的转义字符。要按字面意思表示它,您需要再次使用另一个\
对其进行转义。另外"
是 EL 中的特殊字符,您还需要对其进行转义以按字面意思表示。因此,正确的语法是:但是,您实际上应该是 () 来防止 XSS。它不仅转义引号,还转义其他字符
使用
fn: escapeXml
It doesn't work because the
\
is an escape character in Java string. To represent it literally, you need to escape it with another\
again. Also the"
is a special character in EL, you also need to escape it to represent it literally. So, the proper syntax would have been:But, you should actually be using
fn:escapeXml()
to prevent XSS. It not only escapes quotes, but also other characters.###See also:
你做错了(使用fn:replace)。
正确的方法是:
编辑: 经过更多思考:
You are doing it wrong (with fn:replace).
The correct way is:
Edit: Upon more thinking:
您可能有一个错字:我在那里没有看到结束括号。试试这个:
另外,您是否正在尝试输出结果,或者是否正在尝试更新
news.title
以便下次访问news.title
时替换就位?这将输出结果,但不会替换实际值:此调用不会更改news.title
。You may have a typo: I don't see a closing paren in there. Try this:
Also, are you trying to OUTPUT the results or are you trying to update
news.title
so the next time you accessnews.title
the replacement is in place? This will work to output the result, but not to replace the actual value:news.title
will not be changed by this call.