如何格式化字符串以在呈现为HTML的内联脚本中使用?

时间:2018-02-12 16:57:31

标签: aem sightly htl

我有以下属性字符串

GET 50% OFF ANY M'EDIUM OR L"AR"GE PIZZA!

我在HTML onclick标记中使用它,如此

onclick="trackPromoCta(encodeURI(${properties.ctaTwoTextRight @ context='text'}));"

然而,这会输出无效的html。我尝试了@context of scriptString,但它只是内部JavaScript而不是内部HTML标记。我也尝试了所有其他选项,但实际上没有一个选项可以转义特殊字符来呈现HTML。

我看到有人曾经使用@format在字符串中搜索这些字符并将其转义为HTML但我无法找到如何使用@format来执行此操作。

预期输出应为

onclick="trackPromoCta(encodeURI('GET 50% OFF ANY M'EDIUM OR L"AR"GE PIZZA!'));"

2 个答案:

答案 0 :(得分:0)

@context值“text”,“html”或“attribute”将在生成的html中返回编码值。根据文档,text对所有HTML特殊字符进行编码。

如果您使用“查看页面源”而不是通过“检查开发人员工具的元素”来查看您的html代码。您将看到预期的结果。

onclick="trackPromoCta(encodeURI('GET 50% OFF ANY M'EDIUM OR L"AR"GE PIZZA!'));"

参考: https://helpx.adobe.com/experience-manager/htl/using/expression-language.html

答案 1 :(得分:0)

查看显示上下文的HTL规范:https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/master/SPECIFICATION.md#121-display-context

您需要的是scriptString,因为您的字符串属性最终将用作javascript字符串文字。

  

${properties.jcr:title @ context='scriptString'} <!--/* Applies JavaScript string escaping */-->

此外,您需要用单引号括起HTL表达式,例如:

var str = '${'this is a js string literla' @ context='scriptString'}'

特定示例的HTL代码为:

onclick="trackPromoCta(encodeURI('${properties.ctaTwoTextRight @ context='scriptString'}'));"