我试图在php中传递一个URL作为URL参数,但当我试图获得这个参数时,我什么都没有得到

我使用下面的url形式:

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

我正试着让它通过:

$_GET['link'];

但是没有回音。有什么问题吗?


请张贴你的代码,

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

or

<?php
    echo $_REQUEST['link'];
?>

做的工作……


$_GET不是函数或语言构造——它只是一个变量(数组)。试一试:

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

特别是,它是一个超全局变量:一个由PHP填充的内置变量,在所有作用域中都可用(可以在没有global关键字的函数中使用它)。

因为变量可能不存在,你可以(也应该)确保你的代码不会触发通知:

<?php
if (isset($_GET['link'])) {
    echo $_GET['link'];
} else {
    // Fallback behaviour goes here
}

或者,如果你想跳过手动索引检查,并可能添加进一步的验证,你可以使用过滤器扩展:

<?php
echo filter_input(INPUT_GET, 'link', FILTER_SANITIZE_URL);

最后但并非最不重要的是,你可以使用空合并操作符(自PHP/7.0以来可用)来处理缺失的参数:

echo $_GET['link'] ?? 'Fallback value';

为了确保你总是在安全的一边,没有各种不必要的代码插入使用FILTERS:

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

更多关于php.net函数filter_input的阅读,或者查看不同过滤器的描述


我没有得到任何$_GET["…"](例如print_r($_GET)给出一个空数组)然而$_SERVER['REQUEST_URI']显示东西应该在那里。最后,我发现我只能访问网页,因为我的.htaccess重定向到那里(我的404处理程序是同一个.php文件,并且我在测试时在浏览器中犯了一个拼写错误)。

简单地更改名称意味着在404重定向不起作用时相同的php代码可以正常工作!

因此,即使php代码可能是正确的,$_GET也有可能不返回任何内容。


用这个:

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

或者直接用:

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

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

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


公认的答案是好的。但如果你有这样一个场景:

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'];