一个输入字段上的相同消息属性(编码为HTML)正确呈现,而它(也编码为HTML)在另一个输入域中显示HTML标记。这些发生在GSP视图中。
我想连接消息属性,以避免违反DRY原理。
输入1
<input type="text" class="freeform search-input" title="${g.message(code:"registration.classSearch.field.courseNumberLevels.placeholder.tooltip", encodeAs: "HTML")}">
输入2 我看到问题所在的是三元运算符的false分支。我没有删除三元组,以防万一这可能是问题的一部分。
<input title="${config.config.contains('keyword')? g.message(code:"registration.classSearch.field.keywordinputbox.placeholder.tooltip", encodeAs: "HTML"):g.message(code:"registration.classSearch.field.inputbox.placeholder.tooltip", encodeAs: "HTML") + "<br><br>" + g.message(code:"registration.classSearch.field.courseNumberLevels.placeholder.tooltip", encodeAs: "HTML")}">
从输入2移除encodeAs: "HTML"
使其正确显示。
<input title="${config.config.contains('keyword')? g.message(code:"registration.classSearch.field.keywordinputbox.placeholder.tooltip", encodeAs: "HTML"):g.message(code:"registration.classSearch.field.inputbox.placeholder.tooltip", encodeAs: "HTML") + "<br><br>" + g.message(code:"registration.classSearch.field.courseNumberLevels.placeholder.tooltip")}"
删除两个<br><br>
不会产生预期的效果。将第一个g.message
更改为纯文本消息属性也无效。
输入1 的输出:
<input type="text" class="freeform search-input" title="<b>Undergraduate Level</b>:<br>0&ndash;4999<br><br><b>Graduate Level</b>:</br>5000+">
使用encodeAs
的输入2 的输出:
<input title="These special characters are ignored: *^&#39;!@$#&amp;?[ ] ( ) |. The % is allowed.&lt;b&gt;Undergraduate Level&lt;/b&gt;:&lt;br&gt;0&amp;ndash;4999&lt;br&gt;&lt;br&gt;&lt;b&gt;Graduate Level&lt;/b&gt;:&lt;/br&gt;5000+" type="text" class="freeform search-input">
不带encodeAs
的输入2 的输出:
<input title="These special characters are ignored: *^&#39;!@$#&amp;?[ ] ( ) |. The % is allowed.<b>Undergraduate Level</b>:<br>0&ndash;4999<br><br><b>Graduate Level</b>:</br>5000+" type="text" class="freeform search-input">
我希望它在连接和不连接的情况下表现相同,但事实并非如此。我们不应该以这种方式连接吗?
更新 SO thread about HTML tags in message.properties讨论了防止XSS的HTML编码,这使我意识到encodeA正在执行应做的工作-将消息编码为HTML。删除encodeAs允许HTML呈现而不是被编码为HTML实体。
但这仍然不能解释为什么输入2具有HTML实体时呈现输入1的HTML。
答案 0 :(得分:0)
以连接两个消息属性
该问题可以简化为html中用两个字符串组成的问题。
title = "${g.message(code:'1')}<br><br/>${g.message(code:'2')}"
答案 1 :(得分:0)
因此,如果不是单引号的话...请注意,Stackoverflow甚至无法将输入2识别为HTML ...这是因为您在行尾缺少“>”
答案 2 :(得分:0)
此SO thread about HTML tags in message.properties讨论了防止XSS的HTML编码,这使我意识到encodeAs正在执行应做的工作-将消息编码为HTML。删除encodeAs允许HTML呈现而不是被编码为HTML实体。
因此,有两种可能的解决方法,因为我仍然不知道为什么encodeA似乎表现出不同:
message.properties
中,并从encodeAs: "HTML"
方法中删除g.message