如何在Android中剥离或转义html标记
PHP具有如何在Android中剥离或转义html标记,android,strip-tags,Android,Strip Tags,PHP具有strip_tags函数,可从字符串中剥离HTML和PHP标记 Android有办法转义html吗?答案中由@sparkymat链接的解决方案通常需要正则表达式(这是一种容易出错的方法)或安装第三方库,如或。Android设备上更好的解决方案就是使用Html.fromHtml()函数: public String stripHtml(String html) { if (android.os.Build.VERSION.SDK_INT >= android.os.Buil
strip_tags
函数,可从字符串中剥离HTML和PHP标记
Android有办法转义html吗?答案中由@sparkymat链接的解决方案通常需要正则表达式(这是一种容易出错的方法)或安装第三方库,如或。Android设备上更好的解决方案就是使用Html.fromHtml()函数:
public String stripHtml(String html) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY).toString();
} else {
return Html.fromHtml(html).toString();
}
}
这使用Android内置的Html解析器来构建输入Html的span
表示,而不使用任何Html标记。然后通过将输出转换回字符串来剥离“Span”标记
如前所述,自Android N以来,Html.fromHtml行为发生了变化。有关更多信息,请参阅。如果您的目标是API 16或更高版本,您也可以使用
Html.escapeHtml(字符串)
对于同样针对API 16以下的对象,您可以通过调用HtmlUtils.escapeHtml(String)
来使用下面的类,我只是从Html.escapeHtml(String)
的源代码中提取了它
public类HtmlUtils{
公共静态字符串escapeHtml(字符序列文本){
StringBuilder out=新的StringBuilder();
withinStyle(out,text,0,text.length());
return out.toString();
}
带有InStyle的私有静态void(StringBuilder输出,字符序列文本,
整数开始,整数结束){
for(int i=start;i }否则,如果(c>=0xD800&&c=0xDC00&&d为迟发的帖子感到抱歉,但我认为这可能对其他人有所帮助
仅删除html条带
Html.fromHtml(htmltext).toString()
这样,html标记将被字符串替换,但是字符串的格式将不正确
Html.fromHtml(htmltext).toString().replaceAll("\n", "").trim()
这样,我首先用nextline替换为空格,并删除了空格。同样,您也可以删除其他空格。这是针对新方法替代方案(API 16+):
Spanned spanned;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
spanned = Html.fromHtml(textToShare, Html.FROM_HTML_MODE_LEGACY);
} else {
spanned = Html.fromHtml(textToShare);
}
tv.setText(spanned.toString());
这是非常简单的
对于大型Html字符串,Html.fromHtml可能非常慢
以下是如何使用jsoup轻松快速地完成此任务:
将此行添加到gradle文件:
implementation 'org.jsoup:jsoup:1.11.3'
在此处检查最新的jsoup版本:
将此行添加到代码中:
String text = Jsoup.parse(htmlStr).text();
查看此链接了解如何保留换行符:
由于尚未提及,以向后兼容的方式执行此操作的方法是使用,然后简单地调用(如果不需要使用特定标志,则使用0)
在引擎盖下,它已经为您完成了所有必需的api检查
if (Build.VERSION.SDK_INT >= 24) {
return Html.fromHtml(source, flags);
}
return Html.fromHtml(source);
所以对于输入
<a href="https://www.stackoverflow.com">Click me!</a>
您将只收到字符串“Click me!”作为输出。另外请注意Html。fromHtml(string)
返回一个扩展类CharSequence
。因此,您可以直接与接受CharSequence
参数的方法一起使用,而无需调用toString()
。感谢Nick的精彩回答:-)如果你只想转义标记而不删除它们,你也可以使用Html.escapeHtml(String)
。我认为Html.fromHtml(String)方法有有限的标记支持集我的Html头有Html>body{字体系列:Verdana,sans serif;字体大小:0.8em;颜色:#484848;}h1,h2,h3{字体系列:“Trebuchet MS”,Verdana,无衬线;边距:0px;}h1{字体大小:1.2em;}h2,h3{字体大小:1.1em;}a,a:link,a:visted{color:#2A5685;}a:hover,a:active{color:#c61a1a;}a.wiki-anchor{显示:无;}hr{宽度:100%;高度:1px;背景:#ccc;边框:0;{页脚:字体大小:0.8em;}这也没有得到处理。请帮助注意,Html.fromHtml(Html).toString();
删除了多个空格,这并不总是一个好的选择。我需要4个斜杠。请参阅Avis答案:
String text = Jsoup.parse(htmlStr).text();
HtmlCompat.from(inputString, 0).toString()
if (Build.VERSION.SDK_INT >= 24) {
return Html.fromHtml(source, flags);
}
return Html.fromHtml(source);
<a href="https://www.stackoverflow.com">Click me!</a>