这些功能似乎做同样的事情。
irb> CGI.unescape "Sloths%3A+Society+and+Habitat"
=> "Sloths: Society and Habitat"
irb> URI.decode_www_form_component "Sloths%3A+Society+and+Habitat"
=> "Sloths: Society and Habitat"
Run Code Online (Sandbox Code Playgroud)
有什么不同?
这些方法非常相似。它们都接受一个字符串和一个编码,并以指定的编码返回一个字符串,%并解码转义符。但也有区别:
URI.decode_www_form_componentArgumentError如果字符串包含无效的转义序列,则引发。
URI.decode_www_form_component('%xz')
# ArgumentError: invalid %-encoding (%xz)
Run Code Online (Sandbox Code Playgroud)
CGI.unescape 简单地忽略它们。
CGI.unescape('%xz')
# "%xz"
Run Code Online (Sandbox Code Playgroud)
CGI.unescape 如果结果无效,则忽略您指定的编码
p CGI.unescape("\u263a", 'ASCII')
# "?"
Run Code Online (Sandbox Code Playgroud)
URI.decode_www_form_component 不在乎
p URI.decode_www_form_component("\u263a", 'ASCII')
# "\xE2\x98\xBA"
Run Code Online (Sandbox Code Playgroud)
最后(我什至不愿提及这一点),URI.decode_www_form_component它稍微快一点,因为它使用预先计算的哈希来解码所有 485 个有效的转义码(区分大小写),而CGI.unescape实际上解释十六进制代码并将其重新打包为一个字符。
| 归档时间: |
|
| 查看次数: |
1481 次 |
| 最近记录: |