url查询参数是否有效?
像http://example.com/foo?bar
这样的url有效吗?
我正在寻找一个官方的说法,说某种方式或其他。 一个简单的是/否的答案或轶事证据不会削减它。
- 适用于URI RFC
- 可能可以接受你的服务器端框架/代码
URI RFC不要求查询string的格式。 尽pipe已经认识到查询string通常会带有名称 – 值对,但并不是必须的(例如,它通常会包含另一个URI)。
3.4。 询问
查询组件包含非层次数据,与path组件(参见3.3节)中的数据一起,用于标识URI模式和命名权限(如果有)的范围内的资源。 …
…然而,由于查询组件经常用于以“key = value”对的forms携带标识信息,并且一个常用值是对另一个URI的引用,所以…
HTML确定通过HTTP GET提交的表单应该以“?key1 = value1&key2 = value2 …”(正确编码)的forms将表单值编码为名称 – 值对。 查询string的parsing取决于服务器端代码(例如Java servlet引擎)。
你不能确定你使用的服务器端框架(如果有的话),但是你的服务器端框架可能会假定查询string总是处于名称 – 值对中,并且可能会阻塞一个不是以这种格式(例如?bar
)。 如果您的自定义代码parsing查询string,您只需确保您处理该查询string格式。 如果它的框架,你需要咨询你的文档或者只是testing它看看它是如何处理的。
他们是完全有效的。 你可以认为他们就像那个在暴民信使后面默默站立的大肌肉男人。 这家伙没有名字,也不会说话,但是他的存在传达着信息。
“http”scheme用于通过HTTP协议定位networking资源,本节定义了http URL的scheme特定语法和语义。 http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
所以是的,任何事情在问号后都是有效的。 您的服务器可能会有不同的解释,但是有趣的是 ,您可以看到一些语言将其视为一个布尔值,如果列出则为true。
是的,这是有效的。
如果只是想检查参数是否存在,这是一种方法。
它是有效的:请参阅Wikipedia , RFC 1738( 3.3。HTTP ) , RFC 3986(3.语法组件) 。
URI规范
URI规范的唯一相关部分是知道第一个之间的一切 ?
而第一个#
符合规范的查询定义。 它可以包含任何字符,如[:/.?]
。 这意味着一个查询string如?bar
或?ten+green+apples
是有效的。
在这里findRFC 3986
HTML规格
isindex
不是有意义的HTML5。
它仅作为表单中的第一个元素使用,不提供名称。
如果条目名称是“isindex”,则其types是“text”,这是表单数据集中的第一个条目,然后将该值附加到结果中,并跳过该条目的其余子步骤,转到下一个如果有的话,或者整体algorithm的下一步。
isindex标志仅用于传统用途。 符合HTML文档的表单不会生成需要使用此标志集进行解码的有效载荷。
最后一次isindex被支持的是HTML3 。 它在HTML5中的用途是提供更容易的向后兼容性。
支持图书馆
对这种URI格式的库的支持各不相同,但是一些库确实提供了遗留的支持来简化isindex
使用。
Perl URI.pm (特殊支持)
一些像Perl的URI这样的库提供了parsing这些结构的方法
$uri->query_keywords $uri->query_keywords( $keywords, ... ) $uri->query_keywords( \@keywords ) Sets and returns query components that use the keywords separated by "+" format.
Node.js url
(没有特别的支持)
作为另一个更频繁的例子, node.js
采用正常的路由并且简化parsing
- 一个string
- 或者,键和值的对象(使用
parseQueryString
)
大部分其他URIparsingAPI遵循类似于此的。
- PHP
parse_url
,跟在类似的实现,但只返回查询的string。 parsing为k=>v
的对象需要parse_string()
来自HTML5的isindex
允许表单提交生成这样一个URL,进一步certificate它对HTML有效。 例如:
<form action="#isindex" class="border" id="isindex" method="get"> <input type="text" name="isindex" value="bar"/> <button type="submit">Submit</button> </form>
生成一个types为:
?bar
标准: https : //www.w3.org/TR/html5/forms.html#naming-form-controls : -the-name-attribute
isindex
是不赞成的,如下所述: https : //stackoverflow.com/a/41689431/895245
正如所有其他答案所描述的那样,检查是非常有效的,特别是布尔types的东西
这是一个简单的函数来获取查询string的名称:
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, " ")); }
现在你想检查你正在查找的查询string是否存在,你可以做一个简单的事情:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
如果函数找不到查询string, exampleQueryString
将为false
,否则将为true
。