最近我遇到了一个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处理的一般最佳实践。
发布于 2012-05-21 02:00:46
有一个字符属性数据库和一个描述它的报告,UNICODE CHARACTER DATABASE,它给出了浏览器“应该”如何处理代码点的好主意。我喜欢这个词,“应该”。Safest将是一个白名单,您可以使用L|M|N|S、字母或标记、数字或符号。
看一下库的ICU project
https://stackoverflow.com/questions/10556875
复制相似问题