0

我在我的项目中看到一个代码

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

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

4

1 回答 1

0

HTL 不会解码返回的文本format。我认为混淆来自文档,该文档为显示上下文text说明了以下内容:

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

(来源:HTL 规范第 1.2.1 节显示上下文

但这并不意味着这个上下文会解码任何东西,它会编码HTML 标签。

因此,如果sighltyObj.field1Hello%20World,它将不会呈现Hello WorldHello%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

field1你的吸气剂sighltyObj必须进行解码,这样Hello%20World就变成了Hello World. Stackoverflow 上已经有一个答案,向您展示了如何执行此操作:https ://stackoverflow.com/a/6138183/190823

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

于 2017-04-10T14:45:35.290 回答