我一直在谷歌搜索来回阅读RFC和SO试图解决这个问题,但我仍然没有得到杰克.
所以我想我们只是投票给"最好的"答案就是这样,或者?
基本上它归结为这个.
3.4.查询组件
查询组件是要由资源解释的信息字符串.
query = *uric在查询组件中,保留字符";","/","?",":","@","&","=","+",","和"$".
让我感到困惑的第一件事就是*uric就是这样定义的
uric = reserved | unreserved | escaped
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
然而,有些段落澄清了这一点
上面的"保留"语法类指的是URI中允许的那些字符,但在通用URI语法的特定组件中可能不允许这些字符; 它们用作第3节中描述的组件的分隔符.
"保留"集中的字符不会在所有上下文中保留.实际上在任何给定URI组件中保留的字符集由该组件定义.通常,如果URI的语义在其转义为US-ASCII编码时被替换,则保留字符.
最后一段摘录感觉有些倒退,但它清楚地说明保留的字符集取决于上下文.然而,3.4声明所有保留字符都在查询组件中保留,但是,这里唯一会改变语义的是逃避问号(?),因为URI没有定义查询字符串的概念.
在这一点上,我完全放弃了RFC,但发现RFC 1738特别有趣.
HTTP URL采用以下形式:
http://<host>:<port>/<path>?<searchpart>在<path>和<searchpart>组件中,"/",";","?" 保留.可以在HTTP内使用"/"字符来指定分层结构.
我至少对RFC 1738取代RFC 2396的HTTP URL进行了解释.因为URI查询没有查询字符串的概念,所以对reserved的解释实际上并不允许我定义查询字符串,因为我习惯了现在做.
当我想将一个数字列表与另一个资源的请求一起传递时,这一切都开始了.我没有想太多,只是将它作为逗号分隔值传递给它.令我惊讶的是,逗号被逃脱了.page.html?q=1,2,3编码的查询变成了page.html?q=1%2C2%2C3它可以工作,但它很难看,并没有想到它.那是我开始浏览RFC的时候.
我的第一个问题很简单,编码逗号是否真的有必要?
根据RFC 2396,我的答案是:是的,根据RFC 1738:没有
后来我找到了有关请求之间传递列表的相关帖子.csv方法被认为是坏的.这显示出来了(之前没见过).
page.html?q=1;q=2;q=3
Run Code Online (Sandbox Code Playgroud)
我的第二个问题,这是一个有效的URL吗?
根据RFC 2396,我的回答是:不,根据RFC 1738:否(;保留)
我没有任何关于传递csv的问题,只要它的数字,但是你确实遇到了如果其他东西突然需要逗号来回来回编码和解码值的风险.无论如何,我尝试使用ASP.NET的分号查询字符串,结果不是我所期望的.
Default.aspx?a=1;a=2&b=1&a=3
Request.QueryString["a"] = "1;a=2,3"
Request.QueryString["b"] = "1"
Run Code Online (Sandbox Code Playgroud)
我没有看到这与csv方法有很大不同,因为当我要求"a"时,我得到一个带逗号的字符串.ASP.NET肯定不是一个参考实现,但它还没有让我失望. …
我正在创建一个照片库,并希望能够在浏览照片时更改查询字符串和标题.
我正在寻找的行为常见于连续/无限页面的一些实现,其中当您向下滚动查询字符串时,不断增加页码(http://x.com?page=4)等.这应该是理论上很简单,但我希望在主流浏览器中安全.
我找到了这篇伟大的帖子,并试图跟随这个例子window.history.pushstate,但这似乎并不适合我.而且我不确定它是否理想,因为我并不真正关心修改浏览器历史记录.
我只是希望能够为当前查看的照片添加书签,而无需在每次更改照片时重新加载页面.
以下是修改查询字符串的无限页面示例:http://tumbledry.org/
UPDATE发现了这个方法:
window.location.href = window.location.href + '#abc';
Run Code Online (Sandbox Code Playgroud)
它似乎适合我,但我是一个新的铬..它可能会导致旧浏览器的一些问题?
我在从PHP代码调用url时遇到问题.我需要使用PHP代码中的查询字符串来调用服务.如果我在浏览器中键入url,它可以正常工作,但如果我使用file-get-contents()来进行调用,我会得到:
警告:file-get-contents(http:// ....)无法打开流:HTTP请求失败!HTTP/1.1 202接受于......
我使用的代码是:
$query=file_get_contents('http://###.##.##.##/mp/get?mpsrc=http://mybucket.s3.amazonaws.com/11111.mpg&mpaction=convert format=flv');
echo($query);
Run Code Online (Sandbox Code Playgroud)
就像我说 - 从浏览器调用,它工作正常.有什么建议?
我也尝试过另一个网址,例如:
$query=file_get_contents('http://www.youtube.com/watch?v=XiFrfeJ8dKM');
Run Code Online (Sandbox Code Playgroud)
这工作得很好......可能是我需要调用的网址中有第二个http://吗?
在Javascript中,如何获取URL字符串的参数(而不是当前的URL)?
喜欢:
www.domain.com/?v=123&p=hello
Run Code Online (Sandbox Code Playgroud)
我可以在JSON对象中获得"v"和"p"吗?
我有三个值,我必须作为参数传递给,例如strID,strName和strDate.
我想将这三个参数重定向到另一个页面Response.Redirect().可以任何人为我提供正确的查询字符串吗?
我有一个像这样的字符串:
"foo=bar&bar=foo&hello=hi"
Run Code Online (Sandbox Code Playgroud)
Ruby on Rails是否提供了解析它的方法,就像它是一个查询字符串一样,所以我得到一个像这样的哈希:
{
:foo => "bar",
:bar => "foo",
:hello => "hi"
}
Run Code Online (Sandbox Code Playgroud)
或者我必须自己写吗?
请注意,上面的字符串不是来自URL的真实查询字符串,而是存储在来自Facebook Connect的cookie中的字符串.
在HttpServletRequest中,getParameterMap返回所有查询字符串参数的Map和发布数据参数.
有没有办法获得一个只有查询字符串参数的Map?我试图避免使用getQueryString并解析出值.
我的报告中有几个Multi-Select参数.我试图找到一种方法来传递Web查询字符串中的单个参数的多个值?如果我传入单个值,它可以正常工作.
报告运行良好,为单个参数选择多个选项.我的麻烦在于Web查询字符串.
我有一个Node.js应用程序,它是一个http客户端(目前).所以我在做:
var query = require('querystring').stringify(propertiesObject);
http.get(url + query, function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
Run Code Online (Sandbox Code Playgroud)
这似乎是一个很好的方法来实现这一目标.然而,我有点恼火,我不得不url + query迈出这一步.这应该由公共图书馆进行封装,但我不认为这存在于节点的http图书馆还没有,我不知道是什么标准NPM包可能完成它.是否有一种相当广泛使用的方式更好?
url.format方法保存了构建自己的URL的工作.但理想情况下,请求的级别也会高于此级别.