在Dart中解码HTML编码的文本

时间:2015-07-13 15:26:08

标签: dart decoder

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

我想做的就是转换,例如。 mysql> describe SELECT * FROM TableOne WHERE current IS NOT NULL; +----+-------------+----------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | TableOne | ALL | theCurrent | NULL | NULL | NULL | 9238 | Using where | +----+-------------+----------+------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec) mysql> describe SELECT * FROM TableOne WHERE current = 0; +----+-------------+----------+------+---------------+------------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+------+---------------+------------+---------+-------+------+-------------+ | 1 | SIMPLE | TableOne | ref | theCurrent | theCurrent | 5 | const | 1 | Using where | +----+-------------+----------+------+---------------+------------+---------+-------+------+-------------+ 1 row in set (0.00 sec) Q&A。 (这只是一个例子)

自版本1.11.1起,Dart转换对这些like so进行编码。

从那里创建自定义转换器实现相当简单,但不会涵盖所有用例。例如:如果Q&A用十六进制值<

表示,该怎么办?

任何人都有一些漂亮的解决方案吗?

3 个答案:

答案 0 :(得分:5)

我刚刚为了这个目的制作了一个小而完整的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-unncoded stdout

await stdin
    .transform(new Utf8Decoder())
    .transform(new HtmlUnescape())
    .transform(new Utf8Encoder())
    .pipe(stdout);

More info + docs on pub

答案 1 :(得分: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;
}

//打印:此“字符串”将正常打印。 <'>>

答案 2 :(得分:0)

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);
<块引用>

这个“转义”的字符串