从 Dart 中的字符串中删除 HTML 标签

Remove HTML tags from a String in Dart

我已经尝试了一段时间,我有一个字符串,其中包含很多 HTML 标签,这些标签采用某种编码形式 喜欢< > (没有空格)在字符串之间。 任何人都可以帮助我删除这些标签,以便我可以获得纯字符串吗?

最后我使用 html 包

实现了这个

这是我的做法

import 'package:html/parser.dart';


//here goes the function 
String _parseHtmlString(String htmlString) {
final document = parse(htmlString);
final String parsedString = parse(document.body.text).documentElement.text;

return parsedString;
}

我不知道是否有更简洁的方法来执行此操作,但这个方法对我有用。

3 步

首先,将其添加到您的 "pubspec.yaml" 文件中

dependencies: flutter_html: ^0.8.2

其次,导入到你的 dart 文件

import 'package:flutter_html_view/flutter_html_view.dart';

3,只需使用

HtmlView(data: "Your Html Data"),

use this class:

import 'package:html/parser.dart';

class HtmlTags {

  static void removeTag({ htmlString, callback }){
    var document = parse(htmlString);
    String parsedString = parse(document.body.text).documentElement.text;
    callback(parsedString);
  }
}

example: 

HtmlTags.removeTag(
 htmlString: '<h1>Hello Bug</h1>',
 callback: (string) => print(string),
);
output: Hello Bug

只需使用

import ‘package:html/parser.dart’;
对于包含 <br><p> 标签的字符串,

会出现问题。缺少段落信息。可能先把<br>替换成<p>,然后得到List:

import ‘package:html/parser.dart’  as dom; 

htmlString = '<p> first ... line.<br>second.....line.<p>'; 

List<String> cleanStrings = new List<String>();
List<dom.Element> ps = parse(htmlString.replaceAll('<br>', '</p><p>'))).querySelectorAll('p');
if (ps.isNotEmpty) ps.forEach((f) {
  (f.text != '') cleanStrings.add(f.text);
});

您可以简单地使用没有第三库的 RegExp 来删除标签 (

/>)

String removeAllHtmlTags(String htmlText) {
    RegExp exp = RegExp(
      r"<[^>]*>",
      multiLine: true,
      caseSensitive: true
    );

    return htmlText.replaceAll(exp, '');
  }

intl 包提供了一种方法 stripHtmlIfNeeded 从字符串中去除 HTML 标签。

此包下的Bidi class提供了处理双向文本的实用方法。

import 'package:intl/intl.dart';

Bidi.stripHtmlIfNeeded("<p>Hello World</p>")

如果您不想只为这个功能使用整个包,下面是方法实现:

static String stripHtmlIfNeeded(String text) {
  return text.replaceAll(RegExp(r'<[^>]*>|&[^;]+;'), ' ');
}

文档:https://api.flutter.dev/flutter/intl/Bidi/stripHtmlIfNeeded.html

如果使用 flutter web 或由于任何原因无法导入解析器,这是我的解决方案,它是可配置的。

  String formatHtmlString(String string) {
      return string
          .replaceAll("\n\n", "<p>") // Paragraphs
          .replaceAll("\n", "<br>") // Line Breaks
          .replaceAll("\"", "&quot;") // Quote Marks
          .replaceAll("'", "&apos;") // Apostrophe
          .replaceAll(">", "&lt;") // Less-than Comparator (Strip Tags)
          .replaceAll("<", "&gt;") // Greater-than Comparator (Strip Tags)
          .trim(); // Whitespace
    }

如果要将 HTML 内容解码为字符串,请执行以下步骤:

  1. 将此插件添加到 pubspec.yaml => HTML Parser - Dart Library
  1. 然后在你的代码中添加这一行=>

    String htmlText = parse("String with HTML tags").body!.text