6

以下重定向 url 变为 http%3A%2F%2F 而不是 http://。我怎样才能避免这种情况?

提前致谢。

$params = array(
            'client_id' => $client_id,
            'redirect_uri' => site_url('welcome/google_connect_redirect/'), 
            'state' => $_SESSION['state'],
            'approval_prompt' => 'force',
            'scope' => 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email',
            'response_type' => 'code'
        );
        $url = "https://accounts.google.com/o/oauth2/auth?".http_build_query($params);
        // send to google
        redirect($url);

URL变成了这样。

https://accounts.google.com/o/oauth2/auth?client_id=871111192098.apps.
googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2Fmyappname
%2Findex.php%2Fwelcome%2Fgoogle_connect_redirect&state=f0babsomeletterscb5b48753358c
3b9&approval_prompt=force&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2F
userinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&
response_type=code            
4

4 回答 4

3

当您将带有特殊字符的字符串放入 URL 时,它们将被编码,您可以使用urldecode

于 2012-04-22T05:47:31.747 回答
1

的重点http_build_query()是,在以查询字符串格式连接它们之前,它是您urlencode()的每个数组值。这是首选行为。

于 2012-04-22T05:54:14.560 回答
1

查询字符串被编码是因为 URL 中有一些具有特殊含义的特殊字符。

来自维基百科

一些字符不能成为 URL 的一部分(例如空格),而另一些字符在 URL 中具有特殊含义:例如,字符 # 可用于进一步指定文档的小节(或片段);字符 = 用于将名称与值分开。可能需要转换查询字符串以满足这些约束。这可以使用称为 URL 编码的模式来完成。

于 2012-04-22T05:55:03.893 回答
0

这实际上是期望的行为和正确的方法。

查看手册和功能说明http_build_query

从提供的关联(或索引)数组生成 URL 编码的查询字符串。

所以基本上它的作用是遍历整个数组并对其进行urlencode(这就是你看到这些字符的原因)并将它与&连接起来。如果你想避免它,那么不要使用 http_build_query() 但我真的不推荐它。

于 2019-02-14T18:13:54.307 回答