javascript - 带有双引号表达式的 js_string

标签 javascript json escaping freemarker

我们有一个 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/

相关文章:

mysql - 如何在 bash 中识别\n

javascript - 模块中的模拟导出函数

javascript - 为什么这个变量会出现 "Uncaught TypeError: Cannot read property"错误?

javascript - animate.css 因动态内容而失败

java - 添加依赖项和库 .jar 后无法解析 json import Intellij

PHP $_SERVER ['HTTP_HOST' ] 转义,这看起来可以接受吗?

regex - Notepad++ -更改转义字符

javascript - 增加 Javascript 中的 setTimeout 间隔

java - Spring MVC 3.0 解析 JSON 中的项目类

json - 按子元素查找元素并替换为子元素的值