当前位置: 首页 > 知识库问答 >
问题:

应该在输出中过滤的Unicode字符列表?

马绪
2023-03-14

最近,由于浏览器支持的数据质量问题,我遇到了一个bug,我正在寻找一个安全规则,用于应用字符串转义而不需要双重大小,除非需要。

UTF-8字节序列“E2-80-A8”(U 2028,行分隔符),在Unicode数据库中是完全有效的字符。但是,该序列表示一个行分隔符(是,除“0A”外)。

而且糟糕的是,很多浏览器(包括Chrome、Firefox、Safari我没有测试其他的),无法处理一个JSONP回调,该回调包含一个包含Unicode字符的字符串。JSONP包含在一个我无法控制的非Unicode HTML中。

浏览器只是报告了此类JavaScript上的无效代码/语法错误,从调试工具和所有文本编辑器来看,这些错误是有效的。我猜测的是,它可能试图将“E2-80-A8”转换为BIG-5并破坏JS语法。

以上只是Unicode如何意外破坏系统的示例。据我所知,一些黑客可以使用RTL和其他控制字符来达到他们的目的。在Unicode规范中有许多“引号”、“空格”、“符号”和“控件”。

问题:

是否有一个Unicode字符列表,让每个程序员都知道我们可能不希望它们在我们的应用程序中有效的隐藏特性(和错误)。(例如,Windows禁用文件名中的RTL)。

编辑:

我不是要求JSON或JavaScript。我要求在所有程序中的Unicode处理的一般最佳实践。

共有3个答案

湛钊
2023-03-14

请看Unicode图表。有一个非打印字符列表。这些都是潜在的麻烦制造者。你的朋友U 2028有很多朋友:http://www.unicode.org/charts/PDF/U2000.pdf而且不只是在2000年的范围内。

你可以把它们全部核弹,或者把它们分成不同的类别(像U 2028这样的SEP字符变成\n或正确转义)等等。

高温高压

子车凌龙
2023-03-14

有一个字符属性数据库和一个描述它的报告,UNICODE character database,它很好地说明了浏览器“应该”如何处理代码点。我喜欢“应该”这个词。最安全的是白名单,您可能会选择L|M|N|S、字母或标记、数字或符号。

看看图书馆的ICU项目

山鸿彩
2023-03-14

它会破坏javascript,因为字符串中不能有换行符:

var myString = "

";

//SyntaxError: Unexpected token ILLEGAL

现在,UTF-8序列< code >“E2-80-A8”解码为unicode码位< code>U 2028,其处理方式类似于javascript中的换行符:

 var myString = "
";

//Syntax Error

然而,写它是安全的

var myString = "\u2028";
//you can now log myString in console and get real representation of this character

这就是正确编码的JSON将拥有的。我会研究如何正确编码JSON,而不是保留一个不安全字符的黑名单。(分别是U 2028和U 2029 AFAIK)。

在菲律宾比索中:

echo json_encode( chr(0xe2). chr(0x80).chr(0xA8 ) );
//"\u2028"
 类似资料:
  • 问题内容: 我有一个很大的时间序列数据帧(称为 df ),前5条记录如下所示: 目标: 我正在尝试删除 “ stn” 列中存在列表中 任何 字符串 的 行。因此,我基本上是在尝试过滤此数据集,以使其不包含以下列表中包含任何字符串的行。 尝试: 返回值: 出[78]: 没有! 我尝试了一些引号,方括号甚至是lambda函数的组合;尽管我还很新,所以可能没有正确使用语法。 问题答案: 使用isin:

  • 我有一个简单的UTF-8测试页面,其中包含多个不同语言字母的文本将字符串化为JSON: http://jsfiddle.net/Mhgy5/ 超文本标记语言: JavaScript: 虽然我希望根据 JSON 规范将非 ASCII 字符转义为 \uXXXX,但它们似乎未被触及。这是我从上面的测试中得到的输出: 我用的是Chrome,所以应该是本机实现,页面的编码是UTF-8,不是应该转义非ASCI

  • 问题内容: 我试图输出简单的html unicode字符,例如从表达式中输出。 我尝试使用,但无法使其显示在HTML中。 html代码未注入到span balise中 不会解释html代码(html字符未出现在控制台中,但是如果我不使用控制器中的表达式并直接调用,则可以在控制台中看到正确解释的HTML字符,但仍未注入进入跨接栏杆) 如何从表达式输出html字符? 我导入脚本并将依赖项添加到我的应用

  • 如果不使用我如何在没有的情况下过滤数据? 假设我有一个矩阵,客户将填写或其任何变体,其他人则将其留空: 输出: 我如何过滤掉值,这样我就可以得到这样的结果: 我想我需要像但是tilda不能处理字符串。

  • 问题内容: 给定一个Unicode字符,返回其脚本的最简单方法是什么(如“ Latin”,“ Hangul”等)?unicodedata似乎没有提供这种功能。 问题答案: 我希望有人以前做过,但是显然没有,所以这就是我最后的目的。下面的模块(我称它为)进行了扩展,并提供了它为unicode char返回一个元组(脚本名称,类别)。例: 模块:https://gist.github.com/2204

  • 问题内容: 我正在使用Sql Server 2008 R2 Enterprise。我正在编写一个能够从Sql表中插入,更新,删除和选择记录的应用程序。当涉及包含to,as拧,胆和啪等 特殊字符 的记录时,应用程序会出错。 这是发生了什么: 命令: 插入新记录,但“名称”字段为,因此字符更改为。 命令: 返回正确的记录,因此再次将字符替换为该记录并返回该记录。 问题: 是否可以使Sql Server