2010-11-18 5 views
1

codeigniterのURLの一部として使用できる電子メールアドレスをエンコードする方法はありますか?私はURLから電子メールアドレスをデコードする必要があります。codeigniterでURL​​の一部として使用できる電子メールアドレスの符号化

私がやろうとしているのは、パスワードを忘れてしまったことだけです。ユーザーのメールアドレスへの確認リンクを送信すると、../encodedEmail/forgottenPasswordCodeのようなリンクが必要です(サブミットされたメールのユーザーにはdb内でforgottenPasswordCodeが更新されます)。 ペアがテーブルにある場合、ユーザーがそのリンクにアクセスすると、パスワードをリセットすることができます(forgottenPasswordCodeをnullに戻します)。

私はちょうどループを行うことができます - 選択クエリ(または)セットでテーブルをチェックしてくださいforgottenPasswordCodeカラムはユニークなので、私は挿入失敗時に生成し続けます(それはもっと速くなりますか?テーブルにまだ存在しないforgottenPasswordCodeです。

しかし、私がこれを行う人は、このように受け入れないだろう:)。彼は、ユーザーの電子メールでチェックを済ませたいと考えています。

私はcodeigniterを使用していますが、私はencode()関数を使用しましたが、エンコードされた電子メール文字列を破る時に '-slashes-'のような文字を生成するようです。

他のアイデアはありますか? BIN2HEX()とHEX2BIN()関数を使用して

答えて

1

試して、

<?php 
function hex2bin($str) 
{ 
    $bin = ""; 
    $i = 0; 
    do 
    { 
     $bin .= chr(hexdec($str{$i}.$str{($i + 1)})); 
     $i += 2; 
    } while ($i < strlen($str)); 
    return $bin; 
} 

$str = '[email protected]'; 

$output = bin2hex($str); 
echo $output . '<br/>'; 

echo hex2bin($output); 

?> 
1

は意味のいくつかの並べ替えを持っていないURLにデータを入れないでください。これには二つの選択肢を残し:

  1. は、POSTの一部としてアドレスを送信します。それがウェブフォームから来ているなら、これは行く方法です。

  2. IDまたはハッシュ値を使用してデータベースのアドレスを参照してください。ユーザーが自分のアカウントを参照するリンクをクリックする必要がある場合は、自分のアカウントを明確に示すものを使用します。パスワードリセットのインスタンスを参照する必要がある場合(多くのシステムでこれを行います)、ハッシュを含むテーブルをURLにそのハッシュを使用して追加します。

なぜURLでエンコードしないのですか?

  • あなたはURLを(UIのそれの一部)を参照することができ、エンコードされたものは奇妙
  • URLはリソースを表す見て、あなたのアプリケーションで物事(ユーザーはおそらく既にIDを持っている)
  • エンコード電子メールアドレスが作る(長いです

URLにパラメータを保存して、Webアプリケーションの概念への参照を削除してください(IDまたはプレーンテキストの名前で1人のユーザーを指すようにしてください)。 URLに収まらないパラメータはPOSTパラメータに入ります。 URLでエンコードされたものを使用する必要がある場合は、一方向エンコーディングとデータベース検索を優先します。

0

例えば、特殊な文字を持つすべての問題

を避けるために、base64でエンコードされた文字列として、一部のURLとして 使用の電子メールを電子メールを使用するために最適でない設計ソリューションであるかもしれないがBase64でエンコードされた文字列「[email protected]は、」必要なのは、使用

前に戻って、その文字列をデコードすることで、あなたのケースでは、URL

../YWJjLWRlZkBleGFtcGxlLmNvbQ==/forgottenPasswordCode 

ある

YWJjLWRlZkBleGFtcGxlLmNvbQ== 

です

関連する問題