你的 URL 解析器如何处理 Unicode?–丹尼尔·勒米尔的博客

主要观点:如今软件中的大多数字符串是 Unicode 字符串,包含各种符号等,存在字母“M”的不同版本视觉相同但语义不同的情况,John Cook 提到可利用此歧义在明处隐藏消息,如用罗马数字 M 警告危险。同时探讨了不同编程语言中 URL 解析器对包含罗马数字的 URL 的处理情况,部分语言如 Java、PHP、Go 等未进行规范化处理,而 JavaScript、C++(使用特定库)等能正确处理。
关键信息:多种编程语言对含罗马数字的 URL 处理不同,Java 标准库返回 null String,C#的 Host 属性返回含罗马数字的域名,IdnHost 属性处理正确,PHP 直接返回含罗马数字的域名,Go 不进行规范化,Python 不处理,JavaScript 能正确转换,C++使用特定库可得到正确结果。
重要细节:列举了不同编程语言的代码示例来展示其对 URL 处理的差异,如 Java 中创建 URI 并获取主机,C#中使用不同属性获取域名等,还提供了相关的进一步阅读资料。

阅读 8
0 条评论