2009-07-15 90 views
1

如何輕鬆地將URL /電子郵件地址編碼和「壓縮」爲PHP中的字符串?在PHP中編碼和壓縮URL

字符串應該是:

  1. 難以由用戶來解碼
  2. 儘可能短(壓縮)
  3. 類似的URL應該是不同的 在數據庫
  4. 容易編碼
  5. 不後通過PHP腳本進行解碼/解壓縮

ex。輸入 - >輸出, stackoverflow.com/1/ - > 「n3uu399」, stackoverflow.com/2/ - > 「ojfiejfe8」

+0

你需要什麼? – Gumbo 2009-07-15 11:03:54

+0

你想創建一些URL縮短嗎? – Boldewyn 2009-07-15 11:22:02

回答

4

不是很短,但你可以zip它與一個密碼,並對其進行編碼使用base64 。請注意,zip is not too safe when it comes to passwords,但應該可以,如果您的加密值旨在使用較短的時間。

請注意,無論您做什麼,除非您同意在本地存儲一些無法訪問的信息,否則您將無法生成某種安全的編碼。這意味着,無論你做什麼,都可以這樣做,因爲任何人都可以在足夠的時間訪問僞加密數據,無論是通過逆向工程算法,暴力破解密碼還是其他任何必需的。

-2

如果您有權訪問數據庫,那麼您可以進行關係查找,即將有2個字段,第1個字段保存原始URL,第2個字段保存壓縮的URL。 爲了讓你可以不喜歡以下

$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]; 
} 

這是我想到了,代碼沒有進行測試

2

你可以做你自己的文本壓縮系統基礎上只是一念第二網址常用字符串:如果URL開始'http://www。',那麼縮短網址的第一個字符是'a',如果它開始'https://www。',那麼第一個字符是'b'...(重複流行變體),如果不是,那麼第一個字母是'z',並且URL遵循編碼模式。

如果接下來的三個字母是'abc',第二個字母是'a'等。您需要列出哪些字母對/三元組最常見的URL並計算出最受歡迎的26/50等(取決於你想使用哪個字符),你應該能夠完全在PHP上對URL進行一些壓縮(不使用數據庫)。人們只能通過知道您的字母對/三元列表(您的映射列表)或通過手動對其進行逆向工程來反轉它。

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))); 
} 

聳肩

您需要更具體地瞭解您的輸入和輸出以及您對每個輸入的期望。

你也可以使用gzcompress/gzuncompress而不是serialize/unserialize等。