我可以使用明显的显示上下文和i18n标签吗?

时间:2017-04-10 12:15:28

标签: internationalization cq5 aem sightly htl

我在项目中看到的代码是

${'myproj.label' @i18n, format=[sighltyObj.field1], context='text'} 

意图是将变量传递给i18n文本+安全地编码文本。这是否正确使用显示上下文和i18n翻译?当我使用field1 =“Hello%20World”进行测试时,它不是对文本进行编码而是按原样进行渲染。 如何在将参数作为变量传递给i18n时对html字符串进行编码?

1 个答案:

答案 0 :(得分:0)

HTL不会解码 format返回的文字。我认为混淆来自于显示上下文text以下内容的文档:

  

将此用于简单的HTML内容 - 对所有HTML进行编码

(资料来源:HTL Specification Section 1.2.1 Display Context

但这并不意味着此上下文解码任何内容,编码 HTML标记。

因此,如果sighltyObj.field1Hello%20World,则将呈现为Hello World,而是呈现为Hello%20World,您已经注意到了。

显示上下文text编码给定文本中的所有HTML标记,这样您就无法将它们“走私”为文本(请参阅代码注入)。

例如:

${'<p>This is my text</p>' @ context='text'}

将创建以下HTML

&lt;p&gt;This is my text&lt;/p&gt;

请注意p标记编码

的方式

<p>成为&lt;p&gt;</p>成为&lt;/p&gt

field1sighltyObj的获取者必须执行解码,以便Hello%20World变为Hello World。 Stackoverflow上已有答案向您展示如何执行此操作:https://stackoverflow.com/a/6138183/190823

String result = java.net.URLDecoder.decode(url, "UTF-8");