我知道如果某个网址类似http://example.com/test.html?id=2
,那么?id=2
用于将参数值发送到请求当前网页的服务器。
现在,如果网址类似于example.com/test.html?id
,这意味着什么?
这些天我在很多网站都看到了这一点。 id
提供了什么?
即id不包含任何值,那么为什么要使用它?
示例:example.net/eticketing/logout?out
- out
为服务器站点提供了什么?
PS:假设PHP是服务器端脚本语言。
答案 0 :(得分:2)
严格意义上说,url的查询部分向服务器发送“值”并不是真的。相反,它只是一个字符串,它由解释由服务器端的字符串处理,通常是一些脚本语言。
通常,像name=value
这样的某种模式会产生一个名为name
的变量,其值为value
。但是,如上所述,这取决于处理步骤,它不是由某些通用标准定义的。
有很多典型的方法可以解释如何提到这样的查询字符串,只保留一些字符串,但没有像上面提到的模式那样解释:
创建了一个变量,但未分配任何值,因为在查询字符串中未指定任何值。这个确实有意义,因为变量的存在本身就是一个可以被评估的语句,因此它可以影响处理步骤。
处理步骤可以选择完全跳过这种字符串被解释的“典型”方式,并简单地接管给定的值并按照它喜欢的方式进行处理。这也确实很有意义,因为通常会在过去的请求中通过完全相同的处理步骤来定义和分发这些链接以供使用。因此,没有任何事情可以反对以任何它认为最适合的方式解释查询的步骤。
通常这样的字符串甚至没有移交给最终处理步骤(某些服务器端脚本语言)。相反,它仅用于在http服务器路由步骤内发生的某些重写规则中进行评估。这是一种非常简单方便的方法,可以独立于变量的概念移交运行时信息。
所以底线是:这完全取决于服务器端处理步骤。
答案 1 :(得分:0)
通过?
访问URL
$_GET
后传递的参数。
这是superglobal
或自动全局变量。这仅仅意味着它在整个脚本的所有范围内都可用。没有必要做全局$变量;在函数或方法中访问它。
如果您的查询字符串包含参数但没有值( 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,它被认为是空的,但不是假的或是空的。
感谢。