在 Dart 中解码 HTML 编码的文本

Posted

技术标签:

【中文标题】在 Dart 中解码 HTML 编码的文本【英文标题】:Decode HTML encoded text in Dart 【发布时间】:2015-10-01 22:53:56 【问题描述】:

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

我想做的是转换例如。 Q&AQ&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 &quot; string &quot; will be<strong> printed normally. &lt; &apos; &gt; </strong> &#62;';
      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("&lt;strong&#62;This &quot;escaped&quot; string");
  print(text);

这个“转义”字符串

【讨论】:

【参考方案4】:

只需使用HTML parser 库:

import 'package:html/parser.dart';
main() 
  print(parseFragment('Q&amp;A').text); // Q&A

【讨论】:

以上是关于在 Dart 中解码 HTML 编码的文本的主要内容,如果未能解决你的问题,请参考以下文章

关于Dart中字符串编码/解码的困惑

dart base64的编码与解码

Dart: 编码和解码各种存档和压缩格式

本文将向您展示如何在 Flutter 中编码/解码 JSON

Flutter Gzip 编码与解码 Dart Gzip 工具类操作

▲Dart-‘dart:convert’库