我们有一个 FTL 有 -
<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>
请注意以上内容无效。
最佳答案
您需要在此处应用两种转义:JavaScript 字符串转义和 HTML 转义。您需要两者,因为这两种格式是独立的,并且 JavaScript 嵌入到 HTML 中。
怎么做...原始方法是 event.title?js_string?html
, 但很容易忘记添加 ?html
,所以不要那样做。相反,使用自动转义(参见 https://freemarker.apache.org/docs/dgui_quickstart_template.html#dgui_quickstart_template_autoescaping )。如果由于某种原因你不能使用这种形式的自动转义(比如你正在使用一些旧的 FreeMarker 版本并且不允许升级),请将整个模板放入 <#escape x as x?html>...</#escape>
.在这两种情况下,您都可以写 ${event.title?js_string}
, 它会正常工作。
但是,如果您使用的是 #escape
, 确保 incompatible_improvements
设置(参见 https://freemarker.apache.org/docs/pgui_config_incompatible_improvements.html )至少为 2.3.20,否则 ?html
不会逃脱 '
.
关于javascript - 带有双引号表达式的 js_string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353853/