从Dart中的String中删除HTML标记

Jas*_*ngh 11 innerhtml dart flutter

我一直试图实现这一点,我有一个字符串,里面包含很多HTML标签,它是一些编码形式的像< 和> (不带空格)在字符串之间.任何人都可以协助我删除这些标签,以便我可以得到一个简单的字符串?

Pha*_* Ky 54

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

</>)

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

    return htmlText.replaceAll(exp, '');
  }
Run Code Online (Sandbox Code Playgroud)

  • 正则表达式绝不是处理 HTML 的方法 https://regex101.com/r/HukWkb/1 当用于字符串 `'&lt;a title="1 &lt; 3, but 3 &gt; 2"&gt;不要使用正则表达式解析 HTML&lt;/a&gt;'`, 替换后将留下 ''2"&gt;不要使用正则表达式来解析 HTML'`,而不是 ''不要使用正则表达式来解析 HTML'` (5认同)

Jas*_*ngh 24

最后,我使用Dart的内置html包实现了这一点

这就是我做到的

import ‘package:html/parser.dart’;
//here goes the function 

String _parseHtmlString(String htmlString) {

var document = parse(htmlString);

String parsedString = parse(document.body.text).documentElement.text;

return parsedString;
}
Run Code Online (Sandbox Code Playgroud)

我不知道是否有更清洁的方法可以做到这一点,但这个对我有用.

  • 它不是内置的,也许您的某些软件包已经包含它?https://pub.dartlang.org/packages/html#-readme-tab- (2认同)

Sud*_*tha 5

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

Bidi这个包下的类提供了处理双向文本的实用方法。

import 'package:intl/intl.dart';

Bidi.stripHtmlIfNeeded("<p>Hello World</p>")
Run Code Online (Sandbox Code Playgroud)

如果您不想将整个包仅用于此功能,则以下是方法实现:

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

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