Javascript 带双引号表达式的js_字符串

Javascript 带双引号表达式的js_字符串,javascript,json,escaping,freemarker,Javascript,Json,Escaping,Freemarker,我们有一个FTL- 当值带有撇号时,如Norman'S Birthday,它将中断 我们使用了js_string来修复它- 但是我们还必须将$expression周围的双引号改为单引号-这不适用于双引号 问题- 有没有办法用$expression周围的原始双引号来解决这个问题 类似于- 注:上述方法不起作用 修改event.title的值,以便将单引号替换为&apos和双引号被替换为“,这样你就不必担心在剩下的部分使用哪种引号了。这里需要两种转义:JavaScript字符串转义和HTML转

我们有一个FTL-

当值带有撇号时,如
Norman'S Birthday
,它将中断

我们使用了
js_string
来修复它-

但是我们还必须将
$expression
周围的双引号改为单引号-这不适用于双引号

问题-

有没有办法用
$expression
周围的原始双引号来解决这个问题

类似于-


注:上述方法不起作用

修改
event.title
的值,以便将单引号替换为
&apos
和双引号被替换为
,这样你就不必担心在剩下的部分使用哪种引号了。

这里需要两种转义:JavaScript字符串转义和HTML转义。这两种格式是独立的,JavaScript嵌入到HTML中

如何做到这一点…最基本的方法是
事件.title?js_string?html
,但是很容易忘记添加
?html
,所以不要这样做。相反,使用自动转义(请参阅)。如果出于某种原因(例如您使用的是旧的FreeMarker版本,并且不允许升级),您可以使用这种形式的自动转义,将整个模板放入
..
中。在这两种情况下,您只需编写
${event.title?js_string}
,即可正常工作


但是,如果您使用的是
#escape
,请确保
不兼容的
设置(请参阅)至少为2.3.20,否则
?html
不会escape

?js_string
应该在花括号{}之外。现在您应该使用双引号““如果要处理字符串中的单引号“”,请使用href值,反之亦然。单引号和双引号不能在同一字符串中使用,因此需要将其中一个替换为另一个

解决方案:


在JavaScript中可以使用相同的表达式来处理特殊字符

可能重复的@obsidiange而不是重复的字符,因为OP需要使用FreeMarker来完成这一操作。有没有办法告诉整个文件级别的FTL处理转义?与全局宏一样?@jforex78可以将FreeMarker配置为在所有
*.ftlh
文件甚至所有文件上使用HTML自动转义。但我相信我的回答中的材料涵盖了这一点。如果您遇到一些复杂的情况,比如只有某些目录中的模板应该自动转义,那么请参阅。很好,我将很快尝试并发布。是的,这是一个很好的选择。除了-我们必须逐个替换所有特殊字符-如
apos
quot
,等等。我们需要像
js_string
这样的东西来处理一般的转义。谢谢