如何URL编码本身就是URL的URL参数?
快速背景 –
我正在对我写的一个返回JSON响应的服务进行jQuery ajax调用。 该服务接受网站URL(即www.google.com,www.xyz.com / abcc123)。 请求的格式如下:
http://www.mysite.com/[url]
…其中[url]是用户提供的url(再次,类似www.google.com/abc)
我需要对参数进行URL编码,因为mysite.com/www.google.com给了我错误。
我的问题是,所有标准的javascript编码function实际上并不对URL进行编码。
一个例子:
document.write("encodeURIComponent = " + encodeURIComponent("www.google.com") + "
"); document.write("encodeURI = " + encodeURI("www.google.com") + "
"); document.write("escape = " + escape("www.google.com"));
…具有以下输出:
encodeURIComponent = www.google.com encodeURI = www.google.com escape = www.google.com
使用JavaScript / jQuery实现此目的的正确方法是什么?
我不认为它是相关的,但为了以防万一,这是一个Rails 3.0.7应用程序。
编辑更多细节
如果www.google.com已经过url编码,并且我的url(www.mysite.com/www.google.com)中的期限没问题,为什么我会收到此错误?
来自Chrome开发工具:
GET http://localhost:3000/s/www.google.com 404 (Not Found)
我的jQuery片段:
$.getJSON("http://localhost:3000/s/" + encodeURI($("#txtURL").val()), function(data) { alert(data.result.url); });
这是一个完全有效的URL:
http://mysite.com/s/www.google.com
我怀疑你刚刚遇到Rails format
东西(即URL末尾的.html
将格式设置为HTML, .js
为JSON,…)所以你只需要修改你的路由以保持格式阻止自动检测:
map.connect '/s/:url', :requirements => { :url => /.*/ }, ...
要么
match '/s/:url' => 'pancakes#house', :constraints => { :url => /.*/ }, ...
或者您正在使用的任何路由语法。
如果你不告诉rails :url
应该匹配/.*/
(即任何东西),它将尝试将路由中的句点解释为格式说明符,这将失败,Rails将404,因为它不能弄清楚如何路由URL。
URL编码会转义URL中具有特殊含义的字符(如/
和?
)和/或不是ASCII字符。 http://mysite.com/www.google.com
是一个完全有效的url,没有什么可以逃脱的。 如果您也包含协议,那么您将获得一些值得逃避的角色:
encodeURIComponent('http://www.google.com') "http%3A%2F%2Fwww.google.com"
如果您的服务器404请求http://localhost:3000/s/www.google.com
,则表示该服务器未处理该URL。 这并不意味着URL无效。
正如mu所说,点不需要编码。 用于构建正确的QUERY_STRING的jQuery方法是使用$.param()
$.param({encodeURIComponent:'http://www.google.de'})