在Dart中解码HTML编码的文本

Dan*_* V. 8 decoder dart

似乎Dart没有提供默认机制(或者至少我找不到它)来解码HTML转义实体.

我想做的是转换例如.Q&AQ&A.(这只是一个例子)

由于1.11.1版本,飞镖转换编码这些像这样.

从那里创建自定义转换器实现相当简单,但不会涵盖所有用例.如:如果<以十六进制值表示,该<怎么办?

有人有一些漂亮的解决方案

Pat*_*ick 9

只需使用HTML 解析器库:

import 'package:html/parser.dart';
main() {
  print(parseFragment('Q&A').text); // Q&A
}
Run Code Online (Sandbox Code Playgroud)


fil*_*iph 6

我刚刚为了这个目的制作了一个小而完整的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);
}
Run Code Online (Sandbox Code Playgroud)

异步使用

您还可以使用转换器转换流.例如,下面的代码将POSIX stdin转换为HTML-unncoded stdout.

await stdin
    .transform(new Utf8Decoder())
    .transform(new HtmlUnescape())
    .transform(new Utf8Encoder())
    .pipe(stdout);
Run Code Online (Sandbox Code Playgroud)

关于酒吧的更多信息+文档.