【问题标题】:When should I escape urls?我什么时候应该转义网址?
【发布时间】:2011-02-01 11:12:14
【问题描述】:

我有一个 URL 并使用:

url = "http://ec4.images-xxx.com/images/I/41-%2B6wMiewL._SL135_.jpg"
url = URI.escape(url)
puts url => "http://ec4.images-xxx.com/images/I/41-%252B6wMiewL._SL135_.jpg"

从结果中我可以看到 URI 再次转义了之前转义的%2B,变成了%252B,这是不正确的。

我想知道如何确定何时应该转义一个 URL。或者,有什么聪明的方法可以知道什么时候逃,什么时候不逃?

【问题讨论】:

    标签: ruby url uri


    【解决方案1】:

    您的第一个字符串已经正确地进行了 URI 编码,因此当您尝试对其重新编码时,URI.escape 方法正在将“%”编码为“%25”(URI 编码为“+”)。

    如果您真的不确定您的字符串是否经过 URI 编码,您可以尝试先对其进行解码,然后将其与原始字符串进行比较。如果它们相同,那么它没有被编码。

    【讨论】:

    • 感谢您提供有关如何检查一个字符串是否被转义的解决方案。但是,如果我检查一个字符串没有转义,那么我将使用 URI.escape 来处理它,但我发现 URI.escape("+") 对 "+" 到 "%2B" 的转义没有影响.为什么?
    • 在阅读另一篇文章后知道 + 是路径字符的一部分,即使转义不能将“+”变成“%2B”,它也能正常工作。谢谢。
    • 你是对的,但是当你发出 URI.decode('%2B') 你得到“+”。但正如你所说,一般原则是正确的。
    • %25% 的 URI 编码,而不是 +。这很有意义,因为%252B 解码为%2B,后者又解码为+
    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2023-02-07
    • 2010-12-30
    相关资源
    最近更新 更多