6

次のリダイレクト URL は、http:// ではなく http%3A%2F%2F になります。どうすればこれを回避できますか?

前もって感謝します。

$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 に答える