http://在CodeIgniter中成为http%3A%2F%2F

时间:2012-04-22 05:38:48

标签: php codeigniter

以下重定向网址变为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);

网址就像这样。

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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

http_build_query()的要点是,在以querystring格式加入它们之前,它是urlencode()每个数组的值。这是首选行为。

答案 2 :(得分:1)

查询字符串已编码,因为某些特殊字符在URL中具有特殊含义。

来自Wikipedia

  

某些字符不能是网址的一部分(例如,空格)和   其他一些字符在URL中具有特殊含义:例如,   字符#可用于进一步指定子节(或   片段); character =用于分隔名称   从一个价值。可能需要转换查询字符串以满足这些要求   限制。这可以使用称为URL编码的模式来完成。

答案 3 :(得分:0)

这实际上是期望的行为以及正确的操作方式。

请查看功能手册http_build_query

  

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

因此,基本上,它的作用是遍历整个数组并对其进行urlencode(这就是为什么您看到这些字符),然后将其与&联接在一起。如果您想避免这种情况,请不要使用http_build_query(),但我真的不建议这样做。