在PHP中#(hash)之后获取数据

时间:2018-01-01 07:33:07

标签: php authentication post get

3 个答案:

答案 0 :(得分:1)

#替换为?,然后您可以通过$_GET数组访问它,例如:

$token = $_GET['access_token']; // will held 1b6e37716abdh
$state = $_GET['state']; // will held state123
// and so on.

注意:如果是从表单发送,则将表单方法更改为POST,所有内容都将在$_POST数组中可用,并且不会从URL中隐藏。

<form method="POST" ...>

答案 1 :(得分:0)

如果链接不是您的页面,则可以使用正则表达式(并且无法使用$ _GET)。

https://regex101.com/r/zfrBSk/1

$re = '/access_token=(.*?)(&|$)/';
$str = 'https://wbsite_link.com/#access_token=1b6e37716abdh&state=state123&scope=profile%20booking&token_type=bearer&expires_in=15552000';

preg_match($re, $str, $match);

// Print the token:
Echo $match[1];

https://3v4l.org/e54GC

答案 2 :(得分:0)

另一种选择可能是使用explode并使用多个分隔符(#,&amp;,=):

$subject = "https://WBSITE_LINK.com/#access_token=1b6e37716abdh&state=state123&scope=profile%20booking&token_type=bearer&expires_in=15552000";
$a = explode("#", $subject);
if (isset($a[1])) {
    $b = explode("&", $a[1]);
    if (isset($b[0])) {
        $c = explode("=", $b[0]);
        if (isset($c[1])) {
            echo $c[1];
        }
    }
}

Output

另一种正则表达式可能是使用\K

access_token=\K[^&\s]+

$pattern = '/access_token=\K[^&\s]+/';
$subject = "https://WBSITE_LINK.com/#access_token=1b6e37716abdh&state=state123&scope=profile%20booking&token_type=bearer&expires_in=15552000";
preg_match($pattern, $subject, $matches);
echo $matches[0];

Output