像 http://example.com/foo?bar
这样的 URL 是否有效?
我正在寻找一些官方的链接,以确定该问题的答案。简单的肯定或否定的回答,或是个人经验都不能解决我的问题。
像 http://example.com/foo?bar
这样的 URL 是否有效?
我正在寻找一些官方的链接,以确定该问题的答案。简单的肯定或否定的回答,或是个人经验都不能解决我的问题。
URI RFC并没有规定查询字符串的格式。尽管人们通常会使用查询字符串携带名称-值对,但这并不是必需的(例如,它通常会包含另一个URI)。
第3.4节 查询
查询组件包含非层次化数据,与路径组件中的数据一起,用于标识范围在URI方案和命名机构(如果有)内的资源。......
......然而,由于查询组件经常用于携带“key=value”对形式的标识信息,而且经常使用的一个值是对另一个URI的引用,...
HTML规定,通过HTTP GET提交的表单应该将表单值编码为名称-值对形式,如“?key1=value1&key2=value2...”(正确编码)。查询字符串的解析由服务器端代码处理(例如Java servlet engine)。
您没有说明您使用哪个服务器端框架,但是您使用的服务器端框架可能会假定查询字符串始终是名称-值对,并且可能会因不符合该格式的查询字符串(例如?bar
)而发生错误。如果是您自己定制的代码解析查询字符串,则必须确保处理该查询字符串格式。如果是框架,则需要查阅文档或进行测试以了解其处理方式。
isindex
魔法name
允许发送不带键值格式的查询字符串。https://dev59.com/bG455IYBdhLWcg3wD_6Z#37579004 - Ciro Santilli OurBigBook.com它们是完全有效的。你可以认为它们相当于站在黑帮信使后面静默的大块头汉子。这位汉子没有名字,也不说话,但他的存在本身就传递了信息。
"http"方案用于通过HTTP协议定位网络资源。本节定义了http URL的特定方案语法和语义。"http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
所以,是的,在问号后面可以放任何内容。尽管你的服务器可能会有不同的解释,但是据说,有些语言将其视为布尔值,如果列出了内容,则为true。
是的,这是有效的。
如果只想检查参数是否存在,这是一种方法。
URI规范中唯一相关的部分是要知道第一个?
和第一个#
之间的所有内容都符合规范对查询的定义。它可以包含任何字符,例如[:/.?]
。这意味着查询字符串如?bar
或?ten+green+apples
是有效的。
在此处查找RFC 3986
isindex
在HTML5中没有实际含义。
它被弃用,仅供作为表单中的第一个元素使用,并且提交时没有名称。
如果条目名称为“isindex”,其类型为“text”,并且这是表单数据集中的第一个条目,则将该值附加到结果并跳过此条目的其余子步骤,继续前进到下一个条目(如果有)或整体算法中的下一步骤。isindex标志仅用于遗留用途。符合HTML规范的文档中的表单不会生成需要使用此标志解码的有效负载。
isindex上次受支持是在HTML3中。在HTML5中使用它是为了提供更简单的向后兼容性。
对于此格式的URI,库中的支持因库而异,但某些库确实提供了对isindex
的遗留支持,以便更轻松地使用。
像Perl's URI这样的库提供了解析这些结构的方法。
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(无特殊支持)作为另一个更常见的例子,node.js
采用正常路线,简化解析方式,可以作为:
parseQueryString
)大多数其他 URI 解析 API 都遵循类似的方式。
parse_url
也是遵循类似实现,但仅返回查询字符串。将其解析为 k=>v
对象需要使用 parse_string()
isindex
在HTML5中已被弃用,具有神奇的name
这个被弃用的特性允许表单提交生成这样一个URL,进一步证明它对于HTML是有效的。例如:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
?bar
标准:https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
已被废弃,如https://dev59.com/bG455IYBdhLWcg3wD_6Z#41689431中所述。
这是有效的:参见 维基百科、RFC 1738 (3.3. HTTP)和RFC 3986 (3. 语法组件)。
Example Template Expansion
{&x,y,empty} &x=1024&y=768&empty=
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
现在您想要检查您正在查找的查询字符串是否存在,您可以做一些简单的事情,例如:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
exampleQueryString
将是false
,否则将是true
。