我喜欢使用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知道这个“#”避免采取回应,那么为什么/为什么,这个符号出现在答案中?
谢谢!
答案 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;
}