我们有一辆超光速车-
<a href='javascript:func("${event.title}");'>Link</a>
当该值有撇号时,如Norman'S Birthday,它就会中断。
我们用js_string来修复它-
<a href="javascript:func('${event.title?js_string}');">Link</a>
但我们还必须将$expression周围的双引号更改为单引号--这不适用于双引号。
问题-
有办法用$expression周围的原始双引号来修复这个问题吗?
就像-
<a href='javascript:func("${event.title?js_string}");'>Link</a>
注意,上面的内容不起作用。
发布于 2018-03-19 00:00:44
您需要在这里应用两种类型的转义: JavaScript字符串转义和HTML转义。您需要这两种格式,因为这两种格式是独立的,而且JavaScript是嵌入到HTML中的。
怎么做..。原始的方式是event.title?js_string?html,但是很容易忘记添加?html,所以不要这样做。相反,使用自动转义(参见autoescaping)。如果您由于某种原因不能使用这种形式的自动转义(比如您使用的是一些旧的FreeMarker版本,并且不允许升级),那么将整个模板放入<#escape x as x?html>...</#escape>中。在这两种情况下,您只需编写${event.title?js_string},它就能正常工作。
但是,如果您正在使用#escape,请确保incompatible_improvements设置(请参阅improvements.html)至少为2.3.20,否则?html不会逃避'。
发布于 2018-03-18 23:27:48
修改event.title的值,以便用'替换单引号,用"替换双引号,这样您就不必担心您在其余部分中使用了哪种引号。
发布于 2020-01-29 07:58:07
?js_string应该在花括号{}之外。现在,如果要处理字符串中的单引号‘’,则应该在href值周围使用双引号“”,反之亦然。单引号和双引号不能在同一个字符串中使用,因此需要将它们替换为其他字符串。
解决办法:
<a href="javascript:func('${event.title!?js_string}');">Link</a>
在JavaScript中可以使用相同的表达式来处理特殊字符。
https://stackoverflow.com/questions/49353853
复制相似问题