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