Android有两种不同的方法来转义/编码字符串中的HTML字符/实体:
返回给定纯文本的HTML转义表示。
TextUtils.htmlEncode(String)
对于这个,文档说:
对字符串进行Html编码。
阅读文档时,它们似乎都做了几乎相同的事情,但是,在测试它们时,我会得到一些非常神秘的(对我而言)输出。
EG。输入:<p>This is a quote ". This is a euro symbol: €. <b>This is some bold text</b></p>
Html.escapeHtml
给出:
<p>This is a quote ". This is a euro symbol: €. <b>This is some bold text</b></p>
TextUtils.htmlEncode
给出:
<p>This is a quote ". This is a euro symbol: €. <b>This is some bold text</b></p>
所以似乎第二个转义/编码引号(&#34; ),但第一个没有,虽然第一个编码欧元符号,但第二个不#&# 39;吨。我很困惑。
那么这两种方法的区别是什么?每个转义/编码的字符是什么? 编码和转义之间的区别是什么?我什么时候应该使用其中一种(或者我应该喘气,一起使用它们?)?
答案 0 :(得分:11)
您可以比较他们的来源:
这是Html.escapeHtml
在下面使用的内容:
这是TextUtils.htmlEncode
:
如您所见,后者仅引用为HTML中的标记保留的某些字符,而前者也编码非ASCII字符,因此它们可以用ASCII表示。
因此,如果您的输入仅包含拉丁字符(现在通常不太可能),或者您已在HTML页面中正确设置了Unicode,并且可以使用TextUtils.htmlEncode
。如果您需要确保即使通过7位频道传输文本仍然有效,请使用Html.escapeHtml
。
至于对引号字符("
)的不同处理 - 它只需要在属性值内转义(参见the spec),所以如果你没有把你的文本放在那里,那么你应该没事。
因此,我个人的选择是Html.escapeHtml
,因为它似乎更具通用性。