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

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

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

从 1.11.1 版本开始,Dart 转换编码这些 like so

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

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

【问题讨论】:

    标签: dart decoder


    【解决方案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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-12
          • 1970-01-01
          相关资源
          最近更新 更多