在PHP中获取URL参数

232

我正在尝试在php中将一个URL作为url参数传递,但是当我尝试获取该参数时却什么也得不到。

我正在使用以下url形式:

http://localhost/dispatch.php?link=www.google.com

我正在尝试通过:

$_GET['link'];

但是没有返回任何东西。问题出在哪里?


17
展示你的完整代码。 - Pekka
4
请对$_GET参数执行var_dump,它应该在那里。 - Naftali
1
$_REQUEST['link'] 能用吗?同时请注意,索引键 link 的大小写敏感,要与 URL 中的一致。 - Dutchie432
这在你描述的情况下通常都可以正常工作。如果没有更多信息,我们无法解决你的问题。 - Chiara Coetzee
如果您使用“url /?id = 5”调用PUT并想要获取该ID,会发生什么?由于您调用了PUT(我还发送了一些数据),可能无法使用$ _GET来实现。 - trainoasis
显示剩余2条评论
7个回答

350

$_GET不是一个函数或语言结构,它只是一个变量(一个数组)。尝试一下:

<?php
echo $_GET['link'];

特别是,它是一个超全局变量:一个由PHP自动填充并在所有作用域中可用的内置变量(您可以在函数内部使用它,而无需global关键字)。
由于变量可能不存在,您可以(也应该)确保您的代码不会触发通知:
<?php
if (isset($_GET['link'])) {
    echo $_GET['link'];
} else {
    // Fallback behaviour goes here
}

或者,如果您想跳过手动索引检查并可能添加进一步的验证,您可以使用filter扩展。
<?php
echo filter_input(INPUT_GET, 'link', FILTER_SANITIZE_URL);

最后但并非最不重要的是,您可以使用null coalescing operator(自PHP/7.0起可用)来处理缺少的参数:
echo $_GET['link'] ?? 'Fallback value';

15
如果你和我一样什么也没有获得,那么你应该知道,“link”是URL地址中的一个变量名!所以使用 $_GET['link']; 时,你需要输入这样的URL:http://localhost/?link=test - Firzen
我正在localhost上使用WAMP,但这个解决方案不起作用。 http://localhost/station?type=2 echo $_GET['type'];null - NineCattoRules
1
最终我使用了 parse_str(parse_url($actual_link)['query'], $params);。更多信息请参见 https://dev59.com/bGgu5IYBdhLWcg3wOUq-#11480852。 - NineCattoRules
你说“$_GET不是一个函数或语言结构——它只是一个变量(一个数组)”,但我们不是通过索引访问值,而是通过字符串访问值。这更像是一个字典而不是一个数组吗? - ScottyBlades
1
@ScottyBlades 我是在讲PHP数据结构的背景下。在PHP中,数组是一个键/值组合的有序列表。这与其他语言(如C或JavaScript)所称的“数组”不同。 - Álvaro González

31
请发表您的代码。
<?php
    echo $_GET['link'];
?>
或者
<?php
    echo $_REQUEST['link'];
?>

工作...


24

使用这个:

$parameter = $_SERVER['QUERY_STRING'];
echo $parameter;

或者直接使用:

$parameter = $_GET['link'];
echo $parameter ;

21

为了确保您始终处于安全状态,而又不会出现各种不需要的代码插入,请使用过滤器:

echo filter_input(INPUT_GET,"link",FILTER_SANITIZE_STRING);

更多关于php.net函数filter_input的阅读材料,或查看不同筛选器的说明


请注意,此过滤器不能保护您免受任何攻击。然而,该过滤器将会对您的数据造成无法挽回的损坏。除非您确切知道自己在做什么,请勿使用它。 - Dharman

10

这个答案是不错的。但是如果你有这样的场景:

http://www.mydomain.me/index.php?state=California.php#Berkeley

您可以像以下这样将命名锚点视为查询字符串:

http://www.mydomain.me/index.php?state=California.php&city=Berkeley

然后,像这样访问它:

$Url = $_GET['state']."#".$_GET['city'];

5
我无法获取任何$_GET["..."]的内容(例如,print_r($_GET)返回一个空数组),但是$_SERVER['REQUEST_URI']显示应该有内容。最后发现,我只能访问网页,因为我的.htaccess在重定向它(我的404处理程序是相同的.php文件,而我在测试时在浏览器中输入错误)。
仅仅更改名称意味着当404重定向未启动时,相同的php代码有效!
因此,即使php代码可能是正确的,还有一些方法可以使$_GET返回空值。

5
$Query_String  = explode("&", explode("?", $_SERVER['REQUEST_URI'])[1] );
var_dump($Query_String)

数组 ( [ 0] => 链接=www.google.com )


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接