从 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("\"", """) // Quote Marks
.replaceAll("'", "'") // Apostrophe
.replaceAll(">", "<") // Less-than Comparator (Strip Tags)
.replaceAll("<", ">") // Greater-than Comparator (Strip Tags)
.trim(); // Whitespace
}
如果要将 HTML 内容解码为字符串,请执行以下步骤:
- 将此插件添加到
pubspec.yaml
=>
HTML Parser - Dart Library
然后在你的代码中添加这一行=>
String htmlText = parse("String with HTML tags").body!.text
我已经尝试了一段时间,我有一个字符串,其中包含很多 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("\"", """) // Quote Marks
.replaceAll("'", "'") // Apostrophe
.replaceAll(">", "<") // Less-than Comparator (Strip Tags)
.replaceAll("<", ">") // Greater-than Comparator (Strip Tags)
.trim(); // Whitespace
}
如果要将 HTML 内容解码为字符串,请执行以下步骤:
- 将此插件添加到
pubspec.yaml
=> HTML Parser - Dart Library
然后在你的代码中添加这一行=>
String htmlText = parse("String with HTML tags").body!.text