Dart消毒国际文本

时间:2015-06-24 00:50:05

标签: internationalization dart dart-html

如何最好地清理文本

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;和&lt;&gt;消除有效的撇号&#39; - HtmlEscape .convert(..)类/方法也可以转换所有&amp;在所有HtmlEscapeMode中。

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

2 个答案:

答案 0 :(得分:1)

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

最初的问题是翻译引擎使用&amp;#39;对于撇号 - 可能不会将它与滥用撇号作为单引号混淆。

总之,最好的解决方案是替换&amp;#39;使用撇号的正确unicode字符,实际上是

(正确)撇号U + 0027&amp;#39;被误解的是字体字体打印(不正确)笔直 - 哪些图形人真的很讨厌 - 就像笔直“。

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

答案 1 :(得分:0)

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);
}