首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Java和Ruby中完全转义保留的URL字符?

如何从Java和Ruby中完全转义保留的URL字符?
EN

Stack Overflow用户
提问于 2013-10-25 03:43:28
回答 2查看 96关注 0票数 0

我有两个客户端,一个用Java编写,另一个用Ruby编写,它们需要从字符串中转义保留的URL字符。我遇到的问题是,我找不到一个在两个平台上执行完全相同编码的库。输出需要完全相同,以便以后可以比较转义的字符串是否相等。

EN

回答 2

Stack Overflow用户

发布于 2013-10-25 03:46:21

为什么要比较转义格式的URL字符串?即使URL的转义方式可能不同,您也可以取消转义它们并比较结果字符串值。在两个平台上,未转义的值应该相同。

票数 0
EN

Stack Overflow用户

发布于 2013-10-25 04:18:59

问题是,不能保证生成的URL是一致的。可以对查询参数进行不同的排序,这将中断将URL作为字符串进行比较的所有尝试。

相反,您必须将URL分解为它们的组成部分。URI规范得到了很好的遵循,我们可以这样做,并检索各个部分并对它们进行比较。

例如:

代码语言:javascript
运行
复制
require 'uri'

URL1 = 'http://www.example.com?foo=1&bar=2'
URL2 = 'http://www.Example.com?bar=2&foo=1'

URL1 == URL2 # => false

url1 = URI.parse(URL1)
url2 = URI.parse(URL2)

(url1.host.downcase == url2.host.downcase) && (URI.decode_www_form(url1.query).sort == URI.decode_www_form(url2.query).sort)
# => true

尝试将URL1URL2作为字符串进行比较,结果会失败。尝试将查询作为字符串进行比较,结果将失败。对主机进行不区分大小写的比较,并对查询组件进行排序,使它们规范化,这样您就有一个合理的机会进行比较,看看它们是否匹配。

如果您知道接收查询的主机是不区分大小写的,则可以稍微缩短它:

代码语言:javascript
运行
复制
url1 = URI.parse(URL1.downcase)
url2 = URI.parse(URL2.downcase)

(url1.host == url2.host) && (URI.decode_www_form(url1.query).sort == URI.decode_www_form(url2.query).sort)
# => true

我遇到过一些主机,它们希望查询中包含区分大小写的参数以及位置相关的参数,因此将所有内容合并为小写可能不适用于特定的URL,但对于测试相等性来说,这应该是可以的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19575143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档