Android的Html.escapeHtml和TextUtils.htmlEncode有什么区别?我什么时候应该使用其中一种?

前端之家收集整理的这篇文章主要介绍了Android的Html.escapeHtml和TextUtils.htmlEncode有什么区别?我什么时候应该使用其中一种?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Android有两种不同的方法来转义/编码Strings中的HTML字符/实体:

> Html.escapeHtml(String),在API 16(Android 4.1)中添加.文档说:

Returns an HTML escaped representation of the given plain text.

> TextUtils.htmlEncode(String)对于这一个,文件说:

Html-encode the string.

阅读文档,他们似乎都做了几乎相同的事情,但是,在测试它们时,我得到一些非常神秘(对我而言)的输出.

例如.使用输入:< p>这是一个引号“.这是一个欧元符号:€.< b>这是一些粗体文本< / b>< / p>

> Html.escapeHtml给出:

&lt;p&gt;This is a quote ". This is a euro symbol: &#8364;. &lt;b&gt;This is some bold text&lt;/b&gt;&lt;/p&gt;

>而TextUtils.htmlEncode给出:

&lt;p&gt;This is a quote &quot;. This is a euro symbol: €. &lt;b&gt;This is some bold text&lt;/b&gt;&lt;/p&gt;

所以似乎第二个转义/编码引号(“),但第一个没有,虽然第一个编码欧元符号,但第二个没有.我很困惑.

那么这两种方法有什么区别呢?每个转义/编码的字符是什么?编码和转义之间的区别是什么?我什么时候应该使用其中一种(或者我应该喘气,一起使用它们?)?

解决方法

您可以比较他们的来源:

这就是Html.escapeHtml在下面使用的内容

https://github.com/android/platform_frameworks_base/blob/d59921149bb5948ffbcb9a9e832e9ac1538e05a0/core/java/android/text/Html.java#L387

这是TextUtils.htmlEncode:

https://github.com/android/platform_frameworks_base/blob/d59921149bb5948ffbcb9a9e832e9ac1538e05a0/core/java/android/text/TextUtils.java#L1361

如您所见,后者仅引用为HTML中的标记保留的某些字符,而前者也编码非ASCII字符,因此它们可以用ASCII表示.

因此,如果您的输入只包含拉丁字符(现在通常不太可能),或者您已在HTML页面中正确设置了Unicode,并且可以使用TextUtils.htmlEncode.然而,如果您需要确保您的文本即使通过7位通道传输也能正常工作,请使用Html.escapeHtml.

至于引号字符(“)的不同处理 – 它只需要在属性值内转义(见the spec),所以如果你没有把你的文本放在那里,你应该没问题.

因此,我个人的选择是Html.escapeHtml,因为它似乎更通用.

猜你在找的Android相关文章