网址是否http://example.com/foo?bar
有效?
我正在寻找指向某种官方方式的链接。一个简单的是/否答案或传闻证据都不会解决这个问题。
网址是否http://example.com/foo?bar
有效?
我正在寻找指向某种官方方式的链接。一个简单的是/否答案或传闻证据都不会解决这个问题。
Answers:
该URI RFC没有强制要求查询字符串的格式。尽管已认识到查询字符串通常会携带名称/值对,但并不需要(例如,它通常包含另一个URI)。
3.4。询问
查询组件包含非分层数据,以及路径组件中的数据(第3.3节),用于标识URI方案和命名权限(如果有)范围内的资源。...
...但是,由于查询组件通常用于以“键=值”对的形式携带标识信息,并且一个经常使用的值是对另一个URI的引用,因此...
HTML规定,通过HTTP GET提交的表单应将表单值编码为“?key1 = value1&key2 = value2 ...”形式的名称/值对(正确编码)。查询字符串的解析取决于服务器端代码(例如Java servlet引擎)。
您无法确定所使用的服务器端框架(如果有),但是您的服务器端框架可能会假设查询字符串将始终以名称/值对的形式出现,并且可能会阻塞查询字符串,而不是以该格式(例如?bar
)。如果它是您自己的自定义代码来解析查询字符串,则只需确保您处理该查询字符串格式。如果是框架,则需要查阅文档或进行简单测试以查看其处理方式。
它们是完全有效的。您可以认为它们等同于沉默寡言地站在暴民信使后面的那个大肌肉男。这个人没有名字,也不说话,但是他的存在可以传达信息。
““ 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
)有效。
isindex
不是有意义的HTML5。
不建议将其提供为仅用作表单中的第一个元素,并且不带名称提交。
如果该条目的名称是“ isindex”,其类型是“ text”,并且这是表单数据集中的第一个条目,则将值附加到结果上,并跳过该条目的其余子步骤,然后转到下一个条目(如果有),否则进入整个算法的下一步。
isindex标志仅用于旧版。符合HTML文档的表单不会生成需要使用此标志集进行解码的有效负载。
上一次支持isindex的是HTML3。它在HTML5中的使用是为了提供更容易的向后兼容性。
库中对此URI格式的支持各不相同,但是某些库确实提供了旧版支持以简化isindex
。
一些库(如Perl的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()
这是有效的:请参阅Wikipedia,RFC 1738(3.3。HTTP ),RFC 3986(3.语法组件)。
isindex
name
HTML5 弃用的魔术
此不推荐使用的功能允许表单提交生成这样的URL,从而进一步证明它对HTML有效。例如:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
生成以下类型的URL:
?bar
标准:https : //www.w3.org/TR/html5/forms.html#naming-form-controls : -the-name-attribute
isindex
但是已弃用,如以下网址中所述:https://stackoverflow.com/a/41689431/895245
正如所有其他答案所述,它非常适合检查,特别是布尔类型的东西
这是一个简单的函数,用于按名称获取查询字符串:
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
。