Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中剥离或转义html标记_Android_Strip Tags - Fatal编程技术网

如何在Android中剥离或转义html标记

如何在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

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.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>