首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应该在输出中过滤的Unicode字符列表?

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

Stack Overflow用户
提问于 2012-05-12 02:40:14
回答 4查看 9.3K关注 0票数 20

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

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

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

浏览器只是在这样的JavaScript上报告无效的代码/语法错误,这在调试工具和所有文本编辑器中看起来都是有效的。我猜测它可能会尝试将"E2-80-A8“转换为BIG-5并打破JS语法。

上面的例子只是Unicode如何让你的系统意外崩溃的一个例子。据我所知,一些黑客可以使用RTL和其他控制字符为他们的利益。Unicode规范中有许多“引号”、“空格”、“符号”和“控件”。

问题:

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

编辑:

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-21 02:00:46

有一个字符属性数据库和一个描述它的报告,UNICODE CHARACTER DATABASE,它给出了浏览器“应该”如何处理代码点的好主意。我喜欢这个词,“应该”。Safest将是一个白名单,您可以使用L|M|N|S、字母或标记、数字或符号。

看一下库的ICU project

票数 4
EN

Stack Overflow用户

发布于 2012-05-12 03:18:13

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

代码语言:javascript
复制
var myString = "

";

//SyntaxError: Unexpected token ILLEGAL

现在,UTF-8序列"E2-80-A8"解码为unicode代码点U+2028,其处理方式类似于javascript中的换行符:

代码语言:javascript
复制
 var myString = "
";

//Syntax Error

但是,编写它是安全的。

代码语言:javascript
复制
var myString = "\u2028";
//you can now log myString in console and get real representation of this character

这就是正确编码的JSON所具有的。我会考虑对JSON进行适当的编码,而不是保留一份不安全字符的黑名单。(分别是U+2028和U+2029 AFAIK)。

在PHP中:

代码语言:javascript
复制
echo json_encode( chr(0xe2). chr(0x80).chr(0xA8 ) );
//"\u2028"
票数 9
EN

Stack Overflow用户

发布于 2012-05-20 00:46:00

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

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

HTH

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

https://stackoverflow.com/questions/10556875

复制
相关文章

相似问题

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