我在我的项目中看到一个代码
${'myproj.label' @i18n, format=[sighltyObj.field1], context='text'}
意图是将变量传递给 i18n 文本 + 安全地编码文本。这是使用显示上下文和 i18n 翻译的权利吗?当我使用 field1 = "Hello%20World" 进行测试时,它不是对文本进行编码,而是按原样呈现。如何在将参数作为变量传递给 i18n 时对 html 字符串进行编码?
我在我的项目中看到一个代码
${'myproj.label' @i18n, format=[sighltyObj.field1], context='text'}
意图是将变量传递给 i18n 文本 + 安全地编码文本。这是使用显示上下文和 i18n 翻译的权利吗?当我使用 field1 = "Hello%20World" 进行测试时,它不是对文本进行编码,而是按原样呈现。如何在将参数作为变量传递给 i18n 时对 html 字符串进行编码?
HTL 不会解码返回的文本format
。我认为混淆来自文档,该文档为显示上下文text
说明了以下内容:
将此用于简单的 HTML 内容 - 编码所有 HTML
(来源:HTL 规范第 1.2.1 节显示上下文)
但这并不意味着这个上下文会解码任何东西,它会编码HTML 标签。
因此,如果sighltyObj.field1
是Hello%20World
,它将不会呈现Hello World
为Hello%20World
您已经注意到的那样。
显示上下文text
将对给定文本中的所有 HTML 标记进行编码,这样您就不能将它们“走私”到文本中(请参阅代码注入)。
例如:
${'<p>This is my text</p>' @ context='text'}
将创建以下 HTML
<p>This is my text</p>
注意p
标签是如何编码的:
<p>
成为<p>
并</p>
成为</p>
。
field1
你的吸气剂sighltyObj
必须进行解码,这样Hello%20World
就变成了Hello World
. Stackoverflow 上已经有一个答案,向您展示了如何执行此操作:https ://stackoverflow.com/a/6138183/190823
String result = java.net.URLDecoder.decode(url, "UTF-8");