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

Posted

技术标签:

【中文标题】Android 的 Html.escapeHtml 和 TextUtils.htmlEncode 有啥区别?我啥时候应该使用其中一种?【英文标题】:What's the difference between Android's Html.escapeHtml and TextUtils.htmlEncode ? When should I use one or the other?Android 的 Html.escapeHtml 和 TextUtils.htmlEncode 有什么区别?我什么时候应该使用其中一种? 【发布时间】:2016-05-08 08:09:31 【问题描述】:

android 有两种不同的方式来转义/编码字符串中的 html 字符/实体:

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

返回给定纯文本的 HTML 转义表示。

TextUtils.htmlEncode(String) 对于这个,文档说:

对字符串进行 HTML 编码。

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

例如。输入:<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>

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


那么这两种方法有什么区别呢?每个转义/编码哪些字符? encodingescaping 这里有什么区别?我什么时候应该使用其中一种(或者我应该,喘不过气来,同时使用它们?)?

【问题讨论】:

【参考方案1】:

您可以比较它们的来源:

这是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,因为它似乎更通用。

【讨论】:

谢谢,特别是对何时使用什么以及为什么使用的事情的解释,这是我不确定的。 +1。 感谢参考和解释

以上是关于Android 的 Html.escapeHtml 和 TextUtils.htmlEncode 有啥区别?我啥时候应该使用其中一种?的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

Android游戏开发大全的目录

转Android开发学习总结——搭建最新版本的Android开发环境

Android工程师的概述

Android中常见的权限