【问题标题】:Remove HTML tags from a String in Dart从 Dart 中的字符串中删除 HTML 标签
【发布时间】:2019-01-06 16:38:57
【问题描述】:

我一直在尝试实现这一点,我有一个字符串,其中包含很多 HTML 标记,这些标记是某种编码形式 喜欢<和> (没有空格)在字符串之间。 谁能帮助我删除这些标签,以便我可以得到一个纯字符串?

【问题讨论】:

  • @feeela 虽然我们不在 javascript 中
  • @feeela 我猜这在 Dart 中不起作用。
  • @GünterZöchbauer 最后我使用 HTML 包实现了这一点。
  • 这很快。你是怎么做到的?我不确定html 包是否支持修改(从未使用过)。也许你可以用一些示例代码来回答你的问题?

标签: dart flutter innerhtml


【解决方案1】:

最后我使用 html 包实现了这一点

我是这样做的

import 'package:html/parser.dart';


//here goes the function 
String _parseHtmlString(String htmlString) {
final document = parse(htmlString);
final String parsedString = parse(document.body.text).documentElement.text;

return parsedString;
}

我不知道是否有任何更清洁的方法可以做到这一点,但这个对我有用。

【讨论】:

【解决方案2】:

您可以简单地使用没有 3rd Lib 的 RegExp 来删除标签(

>)

String removeAllHtmlTags(String htmlText) {
    RegExp exp = RegExp(
      r"<[^>]*>",
      multiLine: true,
      caseSensitive: true
    );

    return htmlText.replaceAll(exp, '');
  }

【讨论】:

  • 正则表达式永远不是处理 HTML regex101.com/r/HukWkb/1 的方法当用于字符串 '&lt;a title="1 &lt; 3, but 3 &gt; 2"&gt;Don't use regex to parse HTML&lt;/a&gt;' 时,替换后将留下 '2"&gt;Don't use regex to parse HTML' 而不是 'Don't use regex to parse HTML'
【解决方案3】:

intl 包提供了一个方法 stripHtmlIfNeeded 从字符串中去除 HTML 标记。

此包下的Bidi 类提供了处理双向文本的实用方法。

import 'package:intl/intl.dart';

Bidi.stripHtmlIfNeeded("<p>Hello World</p>")

如果你不想为了这个功能使用整个包,下面是方法实现:

static String stripHtmlIfNeeded(String text) {
  return text.replaceAll(RegExp(r'<[^>]*>|&[^;]+;'), ' ');
}

文档:https://api.flutter.dev/flutter/intl/Bidi/stripHtmlIfNeeded.html

【讨论】:

    【解决方案4】:
    use this class:
    
    import 'package:html/parser.dart';
    
    class HtmlTags {
    
      static void removeTag({ htmlString, callback }){
        var document = parse(htmlString);
        String parsedString = parse(document.body.text).documentElement.text;
        callback(parsedString);
      }
    }
    
    example: 
    
    HtmlTags.removeTag(
     htmlString: '<h1>Hello Bug</h1>',
     callback: (string) => print(string),
    );
    output: Hello Bug
    

    【讨论】:

      【解决方案5】:

      通过使用

      import ‘package:html/parser.dart’;
      

      对于那些包含&lt;br&gt;&lt;p&gt; 标签的字符串会出现问题。缺少段落信息。可以先把&lt;br&gt;替换成&lt;p&gt;,然后得到List:

      import ‘package:html/parser.dart’  as dom; 
      
      htmlString = '<p> first ... line.<br>second.....line.<p>'; 
      
      List<String> cleanStrings = new List<String>();
      List<dom.Element> ps = parse(htmlString.replaceAll('<br>', '</p><p>'))).querySelectorAll('p');
      if (ps.isNotEmpty) ps.forEach((f) {
        (f.text != '') cleanStrings.add(f.text);
      });
      

      【讨论】:

        【解决方案6】:

        如果您想将 HTML 内容解码为字符串,请按照以下步骤操作:

        1. 将此插件添加到pubspec.yaml => HTML Parser - Dart Library
        1. 然后在你的代码中添加这行 =>

          String htmlText = parse("String with HTML tags").body!.text

        【讨论】:

          【解决方案7】:

          如果使用 Flutter Web 或由于任何原因无法导入解析器,这是我的解决方案,它是可配置的。

            String formatHtmlString(String string) {
                return string
                    .replaceAll("\n\n", "<p>") // Paragraphs
                    .replaceAll("\n", "<br>") // Line Breaks
                    .replaceAll("\"", "&quot;") // Quote Marks
                    .replaceAll("'", "&apos;") // Apostrophe
                    .replaceAll(">", "&lt;") // Less-than Comparator (Strip Tags)
                    .replaceAll("<", "&gt;") // Greater-than Comparator (Strip Tags)
                    .trim(); // Whitespace
              }
          

          【讨论】:

            【解决方案8】:

            三个步骤

            首先,将其添加到您的“pubspec.yaml”文件中

            依赖: flutter_html: ^0.8.2

            其次,导入到你的 dart 文件中

            导入'package:flutter_html_view/flutter_html_view.dart';

            第三,简单地使用

            HtmlView(data: "你的 Html 数据"),

            【讨论】:

            • 我认为问题是关于将 html 转换为删除标签的字符串,而不是显示格式化的 HTML?
            猜你喜欢
            • 1970-01-01
            • 2013-02-24
            • 1970-01-01
            • 2021-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-03
            相关资源
            最近更新 更多