Дарт дезинфицировать международный текст

Как лучше всего продезинфицировать текст как

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=... преобразует все & и <> устраняя действительный апостроф &#39; - класс / метод HtmlEscape.convert (..) также преобразует все и во все HtmlEscapeMode.

Могли бы написать свой собственный Sanitizer, но надеюсь, что я упустил какую-то стандартную библиотеку / вызов.

2 ответа

Решение

DartPad Link

RexExp для 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);
}

Подумав немного, я понял, что использование Validators или HtmlEscape / Mode не лучший способ решения проблемы.

Первоначальная проблема заключалась в том, что механизмы перевода используют & # 39; для апострофов - вероятно, не следует путать это с неправильным использованием апострофов как единой цитаты.

Таким образом, лучшим решением является замена & # 39; с правильным символом Unicode для апострофа, который на самом деле

(Правильный) апостроф U+0027 & # 39; это неправильно, поскольку шрифты символов печатают это (неправильно) прямо - что графические парни действительно ненавидят - как прямой ".

Таким образом, вы можете назначить переведенный текст элементу element.text, и, если он содержит проблемные символы, они автоматически экранируются с помощью Dart - и отображаются очень хорошо.

Другие вопросы по тегам