最近,由于浏览器支持的数据质量问题,我遇到了一个错误,我正在寻找一个安全的规则来应用字符串转义而不是双倍大小,除非需要。
UTF-8 字节序列“E2-80-A8”(U+2028,行分隔符),Unicode 数据库中完全有效的字符。但是,该序列表示行分隔符(是的,除“0A”之外)。
糟糕的是,许多浏览器(包括 Chrome、Firefox 和 Safari;我没有测试其他浏览器)无法处理包含该 Unicode 字符的字符串的 JSONP 回调。JSONP 包含在我无法控制的非 Unicode HTML 中。
浏览器只是在此类 JavaScript 上报告了 INVALID CODE/syntax 错误,从调试工具和所有文本编辑器看起来都是有效的。我猜它可能会尝试将“E2-80-A8”转换为 BIG-5 并破坏 JS 语法。
以上只是 Unicode 如何意外破坏您的系统的一个示例。据我所知,一些黑客可以使用 RTL 和其他控制字符来为他们谋福利。Unicode 规范中有很多“引号”、“空格”、“符号”和“控件”。
问题:
是否有一个 Unicode 字符列表供每个程序员了解隐藏的功能(和错误),我们可能不希望它们在我们的应用程序中有效。(例如 Windows 在文件名中禁用 RTL)。
编辑:
我不要求 JSON 或 JavaScript。我要求在所有程序中处理 Unicode 的一般最佳实践。