【问题标题】:Dart sanitize international textDart 净化国际文本
【发布时间】:2015-06-24 00:50:05
【问题描述】:

如何最好地清理文本,例如

abc&#39; a>b<c & a<b>c

转换/显示

abc&#39; a&gt;b&le;c &amp; a&le;b&gt;c

或明文

abc' a>b<c & a<b>c

这样我就可以使用它了

myDiv.innerHtml=...   or
myDiv.setInnerHtml(..., myValidator, mySantitizer);

文本赋值 myDiv.text=... 转换所有 & 和 消除有效的撇号 &amp;#39; - HtmlEscape.convert(..) 类/方法还转换所有 HtmlEscapeMode 中的所有 &。

可以编写我自己的 Sanitizer,但希望我忽略了一些标准库/调用。

【问题讨论】:

  • 所以你想部分清理文本?为什么要将某些字符转换为 html 实体,而不要将其他字符转换为 html 实体?为什么输入文本包含一些“未经处理”的字符,而不包含其他字符?
  • 翻译,例如来自谷歌翻译和其他通常包含某些 html 代码。我目前的解决方法是将其转换为 unicode,以便我可以将其分配给 myElement .text 。我希望我要么忽略了这样的库调用 - 或者有一个分配给 myElement .innerHtml 的解决方案

标签: internationalization dart dart-html


【解决方案1】:

经过一番思考,我意识到使用 Validators 或 HtmlEscape/Mode 并不是解决问题的最佳方法。

最初的问题是翻译引擎使用 '对于撇号 - 可能不要将它与滥用撇号作为单引号混淆。

总而言之,最好的解决方案是替换 '使用正确的 unicode 字符作为撇号,实际上是

(正确的)撇号 U+0027 '不喜欢是因为字符字体(错误地)直接打印它 - 图形人真的很讨厌 - 就像直线一样“。

这样,您可以将翻译后的文本分配给 element.text,如果它包含有问题的字符,它们会被 Dart 自动转义 - 并且渲染得很好。

【讨论】:

    【解决方案2】:

    DartPad Link

    RexExp for HTML Entity

    import 'dart:html';
    import 'dart:convert';
    
    void main() {
      String htmlStr = r'abc&#39; a>b<c & a<b>' * 3;
      var reg = new RegExp(r"(.*?)(&#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+;)|(.*)");
      List<Match> matchs = reg.allMatches(htmlStr);
      var resStr = '';
      matchs.forEach((m) {
        var g1 = m.group(1);
        var g2 = m.group(2);
        var g3 = m.group(3);
        g1 = HTML_ESCAPE.convert(g1 == null ? '' : g1);
        g2 = g2 == null ? '' : g2;
        g3 = HTML_ESCAPE.convert(g3 == null ? '' : g3);
        resStr += g1 + g2 + g3;
      });
      print(resStr);
      document.body.setInnerHtml(resStr);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2015-09-23
      • 2011-02-07
      • 2016-05-09
      相关资源
      最近更新 更多