相关疑难解决方法(0)

什么是有效的,什么不在URI查询中?

背景(问题进一步向下)

我一直在谷歌搜索来回阅读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肯定不是一个参考实现,但它还没有让我失望. …

url uri specifications query-string

91
推荐指数
4
解决办法
8万
查看次数

如何在PHP中压缩/解压缩长查询字符串?

我怀疑这是否是加密,但我找不到更好的短语. 我需要传递一个像这样的长查询字符串:

http://test.com/test.php?key=[some_very_loooooooooooooooooooooooong_query_string]
Run Code Online (Sandbox Code Playgroud)

查询字符串包含没有敏感信息,因此在这种情况下我并不真正关心安全性.它只是......好吧,太长又丑.是否有一个库函数可以让我将查询字符串编码/加密/压缩成类似于md5()的结果(类似于,总是一个32个字符的字符串),但解码/解密/解压缩?

php

31
推荐指数
4
解决办法
6万
查看次数

标签 统计

php ×1

query-string ×1

specifications ×1

uri ×1

url ×1