You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FTL中使用js_string时如何保留表达式外层双引号解决单引号报错

解决方案:保留HTML双引号同时修复FTL JavaScript字符串冲突

好问题!这种既要遵循HTML属性双引号规范,又要避免JavaScript字符串引号冲突的场景确实很常见。我有几个可靠的方法帮你实现需求:


方法1:结合FTL的JavaScript转义和HTML实体

这是最通用且兼容性最好的方案,核心思路是:

  • 用FTL的?escape('javascript')对标题做JavaScript字符串转义,处理掉标题中的双引号(转成\")和其他特殊字符
  • 用HTML实体"代替JavaScript里的双引号,这样就能安全地放在HTML的双引号属性中

最终代码:

<a href="javascript:func(&quot;${event.title?escape('javascript')}&quot;);">Link</a>

举个例子,如果event.title是Norman'S Birthday,FTL渲染后会得到:

<a href="javascript:func(&quot;Norman'S Birthday&quot;);">Link</a>

浏览器解析时会把&quot;转换为双引号,最终执行的JavaScript是func("Norman'S Birthday"),完全正常工作。如果标题包含双引号(比如Norman" Party),转义后会变成Norman\" Party,最终JavaScript代码是func("Norman\" Party"),同样合法。


方法2:利用JSON字符串转义(更简洁)

FTL的?json_string会把变量转换为标准的JSON字符串(自带双引号包裹且转义所有特殊字符),我们只需要去掉前后的双引号,再用HTML实体包裹即可:

<a href="javascript:func(&quot;${event.title?json_string?replace('^"|"$', '', 'r')}&quot;);">Link</a>

这里的?replace('^"|"$', '', 'r')是用正则去掉JSON字符串首尾的双引号,剩下的内容已经是转义好的,配合&quot;就能在HTML双引号属性中安全使用。


为什么之前的方法会受限?

你之前用?js_string后不得不换成单引号,是因为?js_string是专门为单引号包裹的JavaScript字符串设计的——它只会转义单引号为\',不会处理双引号。如果强行把它放在双引号的HTML属性里,一旦标题包含双引号,就会直接破坏HTML属性的结构。


内容的提问来源于stack exchange,提问作者jforex78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:40:26