我需要改变",以\"与JSTL替换功能使用的字符串输入标签,如:
<input type="hidden" name="text" size="40" value="${text}">
Run Code Online (Sandbox Code Playgroud)
如果${text}有",则HTML将被破坏.
所以我试过了
<input type="hidden" name="text" size="40" value="${fn:replace(text, "\"", "\\\""}">
Run Code Online (Sandbox Code Playgroud)
和
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '\"'}">
Run Code Online (Sandbox Code Playgroud)
但没有奏效.该页面会出错
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, '"', '\"')}">
Run Code Online (Sandbox Code Playgroud)
UPDATE2
我发现在发布文本时,使用\不是一个好主意,因为这个原因为什么不能在HTML输入标签中使用?.代码应该是这样的:
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '"')}">
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 22
它不起作用,因为它\是Java字符串中的转义字符.要按字面意思来表示,你需要\再次与另一个人一起逃避它.这"也是EL中的一个特殊字符,你还需要将它转义为字面表示它.所以,正确的语法应该是:
<input type="hidden" name="text" size="40" value="${fn:replace(text, '\"', '\\\"'}">
Run Code Online (Sandbox Code Playgroud)
但是,您实际上应该使用它fn:escapeXml()来阻止XSS.它不仅逃避了引号,还逃避了其他角色.
<input type="hidden" name="text" size="40" value="${fn:escapeXml(text)}">
Run Code Online (Sandbox Code Playgroud)
你做错了(使用fn:replace).
正确的方法是:
<input type="hidden" name="text" size="40" value="<c:out value='${text}'/>">
(actually tested code - works 100%)
Run Code Online (Sandbox Code Playgroud)
编辑:更多思考:
| 归档时间: |
|
| 查看次数: |
44385 次 |
| 最近记录: |