首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dart sanitize国际文本

Dart sanitize国际文本
EN

Stack Overflow用户
提问于 2015-06-24 00:50:05
回答 2查看 227关注 0票数 0

我怎样才能最好地净化文本

代码语言:javascript
复制
abc&#39; a>b<c & a<b>c

转换/显示

代码语言:javascript
复制
abc&#39; a&gt;b&le;c &amp; a&le;b&gt;c

或以明文形式

代码语言:javascript
复制
abc' a>b<c & a<b>c

这样我就可以通过

代码语言:javascript
复制
myDiv.innerHtml=...   or
myDiv.setInnerHtml(..., myValidator, mySantitizer);

文本赋值myDiv.text=...转换all &和<>,消除有效的撇号&#39; -<>类/方法也会转换所有&在所有HtmlEscapeMode模式中。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-26 10:32:59

DartPad链路

用于HTML实体的RexExp

代码语言:javascript
复制
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);
}
票数 0
EN

Stack Overflow用户

发布于 2015-08-03 06:06:36

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

最初的问题是翻译引擎使用“撇号”--可能是为了不将其与误用撇号作为单引号相混淆。

总之,最好的解决方案是用正确的unicode字符替换撇号,这实际上是

  • 非"\u{0027}“=‘= unicode撇号-显示为(直)单引号
  • 不是"\u{2019}“=‘= unicode右单引号(卷曲)引号-参见http://www.fileformat.info/info/unicode/char/2019/index.htm
  • 但是"\u{02BC}“=ʼ=修饰符字母撇号-显示得像卷曲引号-参见ʼ

(正确的)撇号U+0027‘是错误的是字符字体打印它(不正确)直-这图形的家伙真的讨厌-喜欢直“。

这样,您可以将翻译后的文本分配给element.text,如果其中包含有问题的字符,则由Dart自动转义--并且呈现得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31015835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档