在 Dart 中解码 HTML 编码的文本
Posted
技术标签:
【中文标题】在 Dart 中解码 HTML 编码的文本【英文标题】:Decode HTML encoded text in Dart 【发布时间】:2015-10-01 22:53:56 【问题描述】:Dart 似乎没有提供默认机制(或者至少我找不到)来解码 html 转义实体。
我想做的是转换例如。 Q&A
到 Q&A
。 (这只是一个例子)
从 1.11.1 版本开始,Dart 转换编码这些 like so。
从那里创建自定义转换器实现相当简单,但这不会涵盖所有用例。如:如果<
用<
的十六进制值表示呢?
任何人有一些漂亮的解决方案?
【问题讨论】:
【参考方案1】:我刚刚为此目的制作了一个小而完整的 Dart 库:html_unescape。
它支持:
命名字符引用 ( 
)
2099 个
十进制字符引用 (á
)
十六进制字符引用 (ã
)
同步使用
import 'package:html_unescape/html_unescape.dart';
main()
var unescape = new HtmlUnescape();
var text = unescape.convert("<strong>This "escaped" string");
print(text);
异步使用
您还可以使用转换器来转换流。例如,代码
下面会将 POSIX stdin
转换为 HTML 未编码的 stdout
。
await stdin
.transform(new Utf8Decoder())
.transform(new HtmlUnescape())
.transform(new Utf8Encoder())
.pipe(stdout);
More info + docs on pub.
【讨论】:
很棒的图书馆。正是我需要显示从谷歌翻译工具转换的不同语言。 正是我想要的。谢谢。【参考方案2】:我认为 Dart/Flutter 可以自己做:
import 'dart:html' as html;
// In production use library — universal_html: ^1.1.18
// and — import 'package:universal_html/html.dart' as html;
void main()
String badString =
'This " string " will be<strong> printed normally. < ' > </strong> >';
print(_parseHtmlString(badString));
String _parseHtmlString(String htmlString)
var text = html.Element.span()..appendHtml(htmlString);
return text.innerText;
// 它打印:这个“字符串”将被正常打印。 >
【讨论】:
【参考方案3】:1- 向 pubspec.yaml 添加依赖包:
dependencies:
.....
html_unescape: ^1.0.2
2- 在终端中运行:
flutter pub get
示例如何使用:
import 'package:html_unescape/html_unescape.dart';
Text(HtmlUnescape().convert(title));
如果您要多次使用,请按照以下步骤操作:
var unescape = HtmlUnescape();
var text = unescape.convert("<strong>This "escaped" string");
print(text);
这个“转义”字符串
【讨论】:
【参考方案4】:只需使用HTML parser 库:
import 'package:html/parser.dart';
main()
print(parseFragment('Q&A').text); // Q&A
【讨论】:
以上是关于在 Dart 中解码 HTML 编码的文本的主要内容,如果未能解决你的问题,请参考以下文章
本文将向您展示如何在 Flutter 中编码/解码 JSON