什么时候在字符串资源中转义实体?

时间:2013-08-01 14:06:30

标签: android xml android-resources

我对某些escaping rules of Android string resources感到困惑,特别是在涉及HTML时。

在普通的XML编码规则下,请考虑以下编码 -

一个。 “Foo& Bar”

<string name="a">Foo &amp; Bar</string>

“Foo&amp; amp; Bar”

<string name="b">Foo &amp;amp; Bar</string>

℃。 “Foo&lt; b&gt;&amp; amp;&lt; / b&gt; Bar”

<string name="c">Foo &lt;b&gt;&amp;amp;&lt;/b&gt; Bar</string>

但是,由于粗体标记允许作为XML DOM的一部分,显然你可以这样做 -

<string name="d">Foo <b>&amp;</b> Bar</string>

这就是我感到困惑的地方,因为它就像一个字符串可以是HTML 纯文本而没有明确的意图指示。

所以我的问题,使用结合上述情况的案例:

要编码html字符串“Foo&amp; amp; Bar&lt; b&gt;&amp; amp; Baz&lt; / b&gt;” - 第一个&符号的规则是否与第二个不同?我这样做吗? -

<string name="e">Foo &amp; Bar <b>&amp; Baz</b></string>

还是这个? -

<string name="f">Foo &amp;amp; Bar <b>&amp; Baz</b></string>

“f”似乎很疯狂,但如果答案是“e”,那么解码器如何知道不像示例“a”那样解码&符号?只是因为字符串有子元素?

请注意我没有问,因为我正在编码字符串,我问,因为我解析它们。我对“使用CDATA”这样的解决方案不感兴趣 - 我正试图理解这些规则。

1 个答案:

答案 0 :(得分:-1)

显示

&lt; string name =&#34; f&#34;&gt; Foo&amp; amp; Bar&lt; b&gt;&amp; amp;巴兹&LT; / B&GT;&LT; /串GT;

使用:

 <string name="f">Foo &amp;amp; Bar <b>&amp;amp; Baz</b></string>;