2010-12-08 14 views
1

私は最初のWebアプリケーション(まだ!)を書いており、ユーザーアカウントをアクティブにする際に問題があります。URLエンコーディングが正しく機能していません

私が設定したやり方は、新しいユーザーが名前、電子メールアドレス、およびすべてのフォームを記入することです。彼らはそれを提出し、私のアプリケーションは彼らが提供する電子メールアドレスへのリンクを送信します。彼らはリンクをクリックすると、(GETを介して)ランダムなコードとその電子メールアドレスが渡され、アカウントが有効になります。

デバッグを行うために、私はこれをさまざまな電子メールサービスから試してみると思いました。 Hotmailは動作し、私の電子メールは動作しますが、Gmailは動作しません。 Gmailで自分の「アクティベーション」リンクをクリックすると、404 Not Foundエラーが表示されます。だから私は、リンクをどのようにエンコードするのかという問題を絞り込んだ。ここで

は(動作しない)Gmailのリンクです:

mywebsite.com/PHP+App+Files/App1/ln_activate.php?x=userx%40gmail.com&y=9c7b35bbdf1b0d24b0eda62f670c1456 

私はこの1つということに変更する場合:

mywebsite.com/PHP%20App%20Files/App1/[email protected]&y=9c7b35bbdf1b0d24b0eda62f670c1456 

が...それは作業を行います。私は違いが何であるかを見ることができますが、なぜGmailはそうしていますか?回避策の提案は誰にもありますか?

ありがとうございます!

+0

あなたの最後にそれをデコードしますか? –

+0

どのようにメールを送信していますか? –

+0

私は私の最後にそれを解読しません、そして私はphpmailerを使ってそれを送ります....それはあなたが意味するものですか? –

答えて

0

私はあなたが任意のWebサーバ内のフォルダの名前にスペースを使用しないことをお勧め、私はこれはあなたのエラー404の問題を解決すると思います:

また、私はpersonnallyに好きではないPHP App Files

PHP_App_Filesに名前を変更します通常はサーバーがローキャップとハイキャップの違いを作るので、ハイキャップを使用します。しかし、これは個人的な習慣です。

urlencode()urldecode()を使用してURLパラメータを処理することもできます。

+0

これは正しいと思って、後でこのAMで試してみます。正直なところ、私は空間を取り除いたと思っていた....しかし、今私はそれを見て、私はしなかった。 –

+0

これは本当に、本当に、問題の正しい解決策ではありません。既知の問題のある入力を削除することによって、正しくエスケープしていないという事実を回避しています。問題は、他の問題のある入力が存在し、遅かれ早かれ入力することができるということです。 – ZoFreX

0

base64 encodingメール内のリンクのメールアドレスをお試しください。次に、検証を処理するページでbase64をデコードします。

+0

ありがとう - 私はbase64エンコーディングを読んで、それがどうなるかを見ていきます。 –

0

ソリューションは、これは完璧なソリューションです

$url ="some url"; 
$encoded = urlencode($url); 
$decoded = urldecode($encoded); 

です。

+0

ありがとうございましたJapanPro。私はすでにそこに「urlencode」を持っています。問題は、私が私のパスにスペースを持っていることにあります。 –

1

urlencode()はスペースを%20の代わりに+に変換するという問題があります。代わりにrawurlencode()に電話してください。

+0

ありがとうPaul - 私が試してみたいことは、スペースを取り除くことです。私はやったと思ったが、いくつかは逃した。 –

0

PHPのURLエンコーディングは、実際は非常に複雑です。

HTMLでリンクを適切に作成するために知っておく必要がある機能は、urlencode,rawurlencodehtmlentitiesです。ここでは3つすべてを使用するやや工夫した例があります:

<?php 
    $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar); 
    echo '<a href="http://example.com/department_list_script/', 
    rawurlencode('sales and marketing/Miami'), 
    '?', 
    htmlentities($query_string), 
    '">'; 
?> 

'; ?>

不適切なエンコードによって問題が発生しています。うまくいけば、このサンプルとPHPドキュメントで修正することができます!

関連する問題