如何在符号“#”之后通过GET传递值?

时间:2017-01-17 17:17:45

标签: php api oauth

我喜欢使用GOOGLE的OAuth 2.0。

当我打开时:

https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=token&redirect_uri=MYWEB&client_id=MYID.apps.googleusercontent.com

我完全相信:

MYWEB/#access_token=BEAUTIFULL.TOKEN&token_type=Bearer&expires_in=3600&authuser=0&hd=MYEMAIL&session_state=BEAUTIFULL.SESSION&prompt=none

我不知道google给了我这四个参数,(GOOGLE给TOKEN有效!):

authuser = 0
hd = MYEMAIL
session_state = BEAUTIFULL.SESSION
prompt = none
然而,更重要的(我的帖子的真正动机)是:

PHP没有拿这个变量,因为GOOGLE的答案中出现了符号“#”,那么我的服务器/ PHP没有采用任何这些值。

如何在符号“#”之后获取所有$ _SERVER ['QUERY_STRING'](var =>值)???

逻辑上,GOOGLE知道这个“#”避免采取回应,那么为什么/为什么,这个符号出现在答案中?

谢谢!

1 个答案:

答案 0 :(得分:0)

explode()函数将指定字符分开并将每个部分存储在数组中。您可以使用它来分隔字符串,首先是&来获取每个键/值对。然后通过=将密钥与值分开。

所以,这应该适合你:

$input = 'MYWEB/#access_token=BEAUTIFULL.TOKEN&token_type=Bearer&expires_in=3600&authuser=0&hd=MYEMAIL&session_state=BEAUTIFULL.SESSION&prompt=none';
print_r(getGetVars($input));

function getGetVars($string){
    $output = Array();

    // find #
    if(!$hashPos = strpos($string, '#')) return 'error: # not found';

    // trim string to only include text after #
    $string = substr($string, $hashPos + 1);

    // break string apart by &
    $keysAndVals = explode('&', $string);

    foreach($keysAndVals as $keyValString){
        // seperate key and value on each side of =
        $keyValArray = explode('=', $keyValString);

        $key = $keyValArray[0];
        $val = $keyValArray[1];

        $output[$key] = $val;
    }

    return $output;
}