You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter技术问题:如何将HTML标签替换为纯文本?

去除HTML标签的两种实用方法

方法一:正则手动清标签(不用额外装包)

要是你只需要处理<p>这类简单HTML标签,直接用正则表达式把所有标签替换掉就行,在Text组件里直接处理数据:

FutureBuilder<Iterable<SubCategories>>(
  builder: (context, snapshot) {
    // 别忘了加加载状态判断,避免空指针
    if (!snapshot.hasData) {
      return const Center(child: CircularProgressIndicator());
    }
    return ListView.builder(
      itemBuilder: (context, index) {
        // 拿到原始带标签的文本
        String rawDesc = snapshot.data!.elementAt(index).description;
        // 用正则匹配所有HTML标签并替换为空,再去掉首尾空格
        String cleanDesc = rawDesc.replaceAll(RegExp(r'<[^>]*>'), '').trim();
        return Text(cleanDesc);
      },
    );
  },
)

方法二:用html包处理(复杂HTML也能搞定)

如果数据里有更复杂的HTML结构,正则可能漏处理,推荐用专门的HTML解析包:

  1. 先在pubspec.yaml里加依赖:
dependencies:
  html: ^0.15.4 # 版本号可以用最新的
  1. 导入包后处理文本:
import 'package:html/parser.dart' show parse;

// ...

FutureBuilder<Iterable<SubCategories>>(
  builder: (context, snapshot) {
    if (!snapshot.hasData) {
      return const Center(child: CircularProgressIndicator());
    }
    return ListView.builder(
      itemBuilder: (context, index) {
        String rawDesc = snapshot.data!.elementAt(index).description;
        // 解析HTML文档,提取正文纯文本
        var doc = parse(rawDesc);
        String cleanDesc = doc.body?.text.trim() ?? '';
        return Text(cleanDesc);
      },
    );
  },
)

至于你提到的html_character_entities包,它主要是用来转义HTML特殊字符的(比如把&amp;转成&),如果你的数据里有这类转义内容,可以在拿到纯文本后再加一步解码:

import 'package:html_character_entities/html_character_entities.dart';

// ...

String cleanDesc = doc.body?.text.trim() ?? '';
// 解码转义字符
String decodedDesc = HtmlCharacterEntities.decode(cleanDesc);
return Text(decodedDesc);

提醒下:一定要处理snapshot的状态,比如加载中、无数据的情况,不然容易出现空指针错误。

内容的提问来源于stack exchange,提问作者Ayz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:45:35