Rails rails url 拼接 & 组合

tsinghan · 2012年11月14日 · 最后由 TsingHan 回复于 2012年11月15日 · 5986 次阅读

我需要将一个 url?后面的参数 截取出来拼接到另一个 url 后面 如下:

u = "http://www.youtube.com/watch?v=xxxxxxxxxxxxxxxxxxx" u1 = 'http://www.google.com' URI::parse(u).query 这样可以 把 v=xxxxxxxxxxxxxxxxxxx 截取出来 问题是 我如何把截取出来的这块参数 拼接到另一个 url 上?不用拼字符串的方式··

u1 = "http://www.google.com?paramName=#{u}"

#1 楼 @lvjian700 不对吧?这是什么写法?

如果是大量的 param, Objective C 有个 stringByAppendingQueryParameters: Hash . 可以直接拼接. Ruby 实现不知道有没有

    NSDictionary *queryParams = [NSDictionary dictionaryWithObjectsAndKeys:
@"", @"taskName", stringFrom, @"from", stringTo, @"to", runStatus, @"runStatus", nil];

    NSString *resPath = [@"/tasks" stringByAppendingQueryParameters:queryParams];
    DLog(@"resource path: %@", resPath);
4 楼 已删除

#2 楼 @TsingHan sorry 没注意看最后一句,不用 string 拼接的方式

#5 楼 @lvjian700 嗯 我觉得 应该会有一个 类似 URI::parse(u).query 的方法 直接 拼接出来

不用拼字符串的方式?为什么不用?

不拼字符串的方式:

u1 = URI.parse('www.google.com')
u1.query = URI.parse(u).query
u1.to_s

没什么意义...

#7 楼 @huacnlee 我是想知道 有没有 什么方法 能直接 组装成

URI 有个 set_query 方法

#2 楼 @TsingHan 拼接方式借用 @luikore 的方式

require 'net/http'
url = URI.parse('www.baidu.com?encoding=utf8&search=lvjian700')
url.query = URI.parse(url).query
query = url.to_s

addr = "www.google.com?#{query}"
puts addr  #  => www.google.com?encoding=utf8&search=lvjian700

#11 楼 @lvjian700 #8 楼 @luikore 这种方式反而复杂化了,楼主直接字符串拼接有何问题?

#12 楼 @huacnlee 问题倒是没有 刚才说了嘛 我认为会有一个方法 代替 拼字符串 但是没查到 所以咨询一下大家~~

#13 楼 @TsingHan 你要的是一个封装了拼接字符串的 API, 眼不见为净么... 这在拼字符串很舒服的语言里没必要...

#13 楼 @TsingHan = =|| 本质上还是拼接。两个字符串要放一起,肯定要先新开辟内存,然后将 str1, str2 扔进去,之后再返回给你用。

#12 楼 @huacnlee 单纯的拼接可能有风险,例如字串里面已经有了 ? & / 这样的字符。URL 中查询串必须进行 URL 编码才行。例如 将 空格转换为 %20. 可以查看 set_query 的实现。

有个转换查询串的方法,好像是叫 Rack::Utils.parse_query,转成哈希。哈希的 to_query 又能转换成查询串。

查询串的字段之间一般用&符号分隔,但也可以是别的,好像是半角分号也可以。所以自己转换的话,可能出现不兼容的情况。

手机上发的,手边没电脑,细节无法确认,所以上面说“好像”

先分别转换两个 url 的查询串为哈希,然后 merge 一下,再把新的哈希转成查询串。再设置为第二个 url 的查询串

#17 楼 @zhangyuan 你又出现了 yuanyuan 快回来吧 请你吃涮肉呢

#16 楼 @lyfi2003 嗯 拼字符串 却是会有其他风险 我试试 set_query 方法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号