不带值的 URL 参数的含义(例如,“?id”、“注销”)


Meaning of URL parameters without value (e.g., "?id", "logout?out")

我知道如果URL有类似http://example.com/test.html?id=2,那么?id=2用于将参数值发送到请求当前页面的服务器。现在,如果URL类似于 example.com/test.html?id ,这意味着什么?

这些天我在很多网站上看到了这一点。id提供什么?即id不包含任何值,那么为什么要使用它?

示例:example.net/eticketing/logout?out - out向服务器站点提供什么?

PS:假设PHP是服务器端脚本语言。

严格意义上,url的查询部分将"值"发送到服务器并不是真的。相反,它只是一个字符串,由服务器端处理该字符串的内容(通常是某些脚本语言(解释。

实际上,通常某些模式(如name=value(将导致一个名为name的变量将值保存value。但是,如前所述,这取决于处理步骤,它不是由某些通用标准定义的。

有许多

典型的方法来解释您提到的查询字符串,它只包含一些字符串,但与上面提到的模式不同:

  • 将创建一个变量,但未分配任何值,因为在查询字符串中未指定任何值。这确实是有道理的,因为变量的存在本身已经是一个可以计算的语句,因此它可以影响处理步骤。

  • 处理步骤可以选择完全跳过解释此类字符串的"典型"方式,只需接管给定的值并按照自己喜欢的方式处理它。这也有意义,因为通常此类链接是由过去请求中完全相同的处理步骤定义和分发给使用的。因此,没有什么反对以它认为最适合的任何方式解释查询的步骤。

  • 通常这样的字符串甚至不会移交给最终的处理步骤(某些服务器端脚本语言(。相反,它仅用于在 http 服务器路由步骤内发生的某些重写规则中进行评估的目的。这是一种非常简单方便的交接运行时信息的方法,独立于变量的概念。

所以底线是:这完全取决于服务器端处理步骤。

URL?后传递的参数可通过 $_GET 访问。

这是一个superglobal或自动全局变量。这仅意味着它在整个脚本的所有范围内都可用。没有必要做全局$variable;以在函数或方法中访问它。

如果你有一个查询字符串,其中包含一个参数但没有值(not even an equals sign(,如下所示:

http://example.com/test.html?id
<pre>
<?php
print_r($_GET);
if($_GET["id"] === "") echo "id is an empty string'n";
if($_GET["id"] === false) echo "id is false'n";
if($_GET["id"] === null) echo "id is null'n";
if(isset($_GET["id"])) echo "id is set'n";
if(!empty($_GET["id"])) echo "id is not empty";
?>
</pre>

我用http://example.com/test.html?id对此进行了测试,它返回:

id为空字符串

id已设置

所以请注意,一个没有

关联值的参数,即使没有等号,也被认为是一个空字符串(""(,isset(( 为它返回 true,它被认为是空的,但不是假或空。

谢谢。