【发布时间】:2015-10-01 22:53:56
【问题描述】:
Dart 似乎没有提供默认机制(或者至少我找不到)来解码 HTML 转义实体。
我想做的是转换例如。 Q&A 到 Q&A。 (这只是一个例子)
从 1.11.1 版本开始,Dart 转换编码这些 like so。
从那里创建自定义转换器实现相当简单,但这不会涵盖所有用例。如:如果<用<的十六进制值表示呢?
任何人有一些漂亮的解决方案?
【问题讨论】:
Dart 似乎没有提供默认机制(或者至少我找不到)来解码 HTML 转义实体。
我想做的是转换例如。 Q&A 到 Q&A。 (这只是一个例子)
从 1.11.1 版本开始,Dart 转换编码这些 like so。
从那里创建自定义转换器实现相当简单,但这不会涵盖所有用例。如:如果<用<的十六进制值表示呢?
任何人有一些漂亮的解决方案?
【问题讨论】:
我刚刚为此目的制作了一个小而完整的 Dart 库:html_unescape。
它支持:
 )
á)ã)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);
【讨论】:
我认为 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;
}
// 它打印:这个“字符串”将被正常打印。 >
【讨论】:
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);
这个“转义”字符串
【讨论】:
只需使用HTML parser 库:
import 'package:html/parser.dart';
main() {
print(parseFragment('Q&A').text); // Q&A
}
【讨论】: