2009-07-15 17 views
1

URL /電子メールアドレスをPHPで文字列にエンコードして「圧縮する」方が簡単ですか?PHPでのURLのエンコーディングと圧縮

文字列でなければならない:

  1. 困難同様のURLがデータベース
  2. に容易
  3. しない符号化した後 異なるべきユーザ
  4. によって
  5. (圧縮)できる限り短くをデコードしますPHPスクリプトで解読/解凍する

ex。入力 - >出力、 stackoverflow.com/1/ - > "n3uu399"、 stackoverflow.com/2/ - > "ojfiejfe8"

+0

など、gzcompress/gzuncompressの代わりに、シリアル化/アンシリアライズを使用することができますか? – Gumbo

+0

URL短縮ツールを作成しようとしていますか? – Boldewyn

+0

私は多くの問題のためにこれを必要とします。 example.com/confirm.php?id=ii3ru38jd39 < - encoded&compressed e-mail address – Colargol

答えて

4

非常に不足していないが、あなたはzipそれパスワードでとbase64を使用してエンコードすることができ。 zip is not too safe when it comes to passwordsに注意してください。ただし、暗号化された値の有効期間が短くなるようにしてください。

アクセスできない情報をローカルに保存することに同意しない限り、何らかの安全なエンコードを生成することはできません。これは、あなたが何をするにしても、だれでもは十分な時間をかけて疑似暗号化されたデータにアクセスできます。アルゴリズムをリバースエンジニアリングしたり、パスワードを強要したり、

-2

データベースにアクセスできる場合、リレーショナル検索を実行できます。つまり、元のURLを保持するフィールド1と圧縮されたURLを保持する2つのフィールドがあります。あなたはこれは私が思いついているだけの考えで、次の

$str = "a b c d e f g h i j k l m n o p q r s t u v w x y z"; 

$str = explode(" ", $str); 
$len = 5; 

for($i = 0; $i < $len; $i++) 
{ 
    $pos = rand(0, (count($str) - 1)); 
    $url .= $str[$pos]; 
} 

ような何かを行うことができ、コードが

+0

4.データベースにはありません – SeanJA

+1

あなたは衝突(つまり、異なるURLの同じコード)を受ける可能性が非常に高いと思います。また、文字列を配列に分割する必要はありません。[]を使用して文字列オフセットにアクセスできます。また、ループの外側でcount()を呼び出して結果を保存する方が良いでしょう。 –

2

をテストしていないあなたはに基づいて独自のテキスト圧縮方式作ることができる2番目のURLを作るために 一般的な文字列:URLが 'http://www。'で始まる場合、短縮URLの最初の文字は 'a'で、 'https://www。'を開始すると、最初の文字は 'b' ...そうでなければ、最初の文字は 'z'であり、URLはコード化されたパターンで続く。

次の3文字が 'abc'の場合、2番目の文字は 'a'などです。最も一般的な文字ペア/トリプレットのリストがURLにあり、最も人気のある26/50などがあります(使用したい文字に依存します)、URLをPHPで完全に(データベースを使用せずに)圧縮できなければなりません。あなたの手紙のペア/トリプレットリスト(あなたのマッピングリスト)を知っているか、それを手動でリバースエンジニアリングするだけで、人々はそれを逆転することができます。ここで

0

やニーズを満たしていない可能性があり、単純な実装です:

入力/出力:

[email protected] cyUzQTEzJTNBJTIydGVzdCU0MHRlc3QuY29tJTIyJTNC    [email protected] 
http://test.com/ cyUzQTE2JTNBJTIyaHR0cCUzQSUyRiUyRnRlc3QuY29tJTJGJTIyJTNC http://test.com/ 

コード:

function encode ($in) { 
    return base64_encode(rawurlencode(serialize($in))); 
} 

function decode ($in) { 
    return unserialize(rawurldecode(base64_decode($in))); 
} 

肩をすくめ

あなたの入力と出力、それぞれから期待されるものについてより具体的に説明する必要があります。

また、あなたがのためにすることを何が必要です