Dart 清理国际文本
Dart sanitize international text
如何最好地清理像
这样的文本
abc' a>b<c & a<b>c
converting/displaying
abc' a>b≤c & a≤b>c
或明文形式
abc' a>b<c & a<b>c
这样我就可以通过
使用它
myDiv.innerHtml=... or
myDiv.setInnerHtml(..., myValidator, mySantitizer);
文本赋值 myDiv.text=...
转换所有 & 和 <> 消除有效的撇号 '
- HtmlEscape.convert(..) class/method 也转换所有 HtmlEscapeMode 中的所有 &。
可以编写我自己的 Sanitizer,但希望我忽略了一些标准 library/call。
RexExp for HTML Entity
import 'dart:html';
import 'dart:convert';
void main() {
String htmlStr = r'abc' 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);
}
经过一番思考,我意识到使用验证器或 HtmlEscape/Mode 并不是解决问题的最佳方法。
最初的问题是翻译引擎使用 '对于撇号 - 可能不会将其与滥用撇号作为单引号混淆。
综上所述,最好的解决方案是替换 '使用正确的撇号 unicode 字符,实际上是
- NOT "\u{0027}" = ' = unicode 撇号 - 显示为(直)单引号
- NOT "\u{2019}" = ’ = unicode 右单(卷)引号 - 参见 http://www.fileformat.info/info/unicode/char/2019/index.htm
- 但“\u{02BC}”= ʼ = 修饰符字母撇号 - 显示为弯引号 - 参见 http://www.fileformat.info/info/unicode/char/02BC/index.htm
(正确的)撇号 U+0027 '不喜欢的是字符字体(错误地)直接打印它 - 图形人员真的很讨厌 - 就像直接的 ".
有了它,您可以将翻译后的文本分配给 element.text,如果它包含有问题的字符,它们会被 Dart 自动转义 - 并且呈现得很好。
如何最好地清理像
这样的文本abc' a>b<c & a<b>c
converting/displaying
abc' a>b≤c & a≤b>c
或明文形式
abc' a>b<c & a<b>c
这样我就可以通过
使用它myDiv.innerHtml=... or
myDiv.setInnerHtml(..., myValidator, mySantitizer);
文本赋值 myDiv.text=...
转换所有 & 和 <> 消除有效的撇号 '
- HtmlEscape.convert(..) class/method 也转换所有 HtmlEscapeMode 中的所有 &。
可以编写我自己的 Sanitizer,但希望我忽略了一些标准 library/call。
RexExp for HTML Entity
import 'dart:html';
import 'dart:convert';
void main() {
String htmlStr = r'abc' 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);
}
经过一番思考,我意识到使用验证器或 HtmlEscape/Mode 并不是解决问题的最佳方法。
最初的问题是翻译引擎使用 '对于撇号 - 可能不会将其与滥用撇号作为单引号混淆。
综上所述,最好的解决方案是替换 '使用正确的撇号 unicode 字符,实际上是
- NOT "\u{0027}" = ' = unicode 撇号 - 显示为(直)单引号
- NOT "\u{2019}" = ’ = unicode 右单(卷)引号 - 参见 http://www.fileformat.info/info/unicode/char/2019/index.htm
- 但“\u{02BC}”= ʼ = 修饰符字母撇号 - 显示为弯引号 - 参见 http://www.fileformat.info/info/unicode/char/02BC/index.htm
(正确的)撇号 U+0027 '不喜欢的是字符字体(错误地)直接打印它 - 图形人员真的很讨厌 - 就像直接的 ".
有了它,您可以将翻译后的文本分配给 element.text,如果它包含有问题的字符,它们会被 Dart 自动转义 - 并且呈现得很好。