2010-10-29 58 views
2

PHP中是否存在編碼函數,它將對字符串進行編碼,結果輸出只包含字母和數字?我會使用base64,但仍然有一些東西不是數字/字母數字PHP編碼僅包含字母和數字

+2

這是什麼呢?我認爲這可能是一個具體的答案。 – MatTheCat 2010-10-29 08:08:02

+0

前段時間我問了一個類似的問題:[編碼任意數據爲數字?](http://stackoverflow.com/questions/2982112/encoding-arbitrary-data-into-numbers)我還沒有時間去測試答案,但@ Artefacto的外觀很好 – 2010-10-29 08:08:18

+0

使用ord()將所有字符轉換爲它們的ASCII碼? – Mchl 2010-10-29 08:15:21

回答

5

您可以使用base32(代碼易於谷歌),這是一種標準的替代base64。或者使用bin2hex()pack("H*",$hex)進行反轉。然而,十六進制編碼會導致尺寸加倍。

+0

(但如果它的任何重要大小,並開始作爲文字,你可以先壓縮它!) – symcbean 2010-10-29 08:48:32

+0

謝謝你,一個直接的答案! – cappuccino 2010-10-29 08:55:53

1

任何散列函數(md5,sha1等)輸出將只包含十六進制數字,但這不完全是「編碼」。

+0

不想散列,因爲它需要可恢復。 – cappuccino 2010-10-29 08:18:46

+0

我知道這是一個額外的步驟,但是當您需要恢復APC緩存的密鑰時,您不能再次散列該字符串嗎? – 2010-10-29 08:41:51

+0

爲什麼APC密鑰需要恢復?這是一個緩存,使用單向編碼獲取對我來說似乎相當不錯? – Wrikken 2010-10-29 08:50:10

-1

您可以使用僅輸出字母數字字符的基本md5散列函數。

+0

是的,和它的對應'md5_decode()';)儘管如此,它看起來像OP正在尋找一個編碼/解碼對,而不是一個散列函數 – 2010-10-29 08:09:34

+0

這不是一個答案,如果你不喜歡投入時間對於一個真正的答案,不要發佈。這是SO,而不是某種論壇。 – markus 2010-10-29 08:14:14

+0

@tharkun:對不起。我認爲這已經足夠,因爲md5文檔很清楚。我編輯了我的答案。 – gulbrandr 2010-10-29 08:31:50

0

您可以使用a-z/A-Z/0-9編寫自己的base-62編碼器/解碼器。儘管每個ASCII字符都需要3位數字,但效率並不高。

+0

他爲什麼需要3位數字?當然2就足夠了。 – Hammerite 2010-10-29 09:05:05

+0

我對此感到困惑,但我認爲你是對的。 – 2010-10-29 17:10:26

1

簡短答案是否定的,base64與uuencode相比使用了一組縮減的輸出字符集,並且旨在解決大多數字符轉換問題 - 但仍然不是URL安全的(IIRC)。

但是,機制是微不足道的,很容易適應 - 我建議看看base32編碼 - 與base64相同,但使用每個輸入字符少一位來創建輸出(因此32字符字母表是所有必需的),但使用不同的填充字符('='不是網址安全的)。

快速谷歌發現this

0

我寫了這個用字母,數字及破折號。

我敢肯定,你可以提高它取出破折號:

function pj_code($str) { 
    $len = strlen($str); 
    while ($len--) { 
     $enc .= base_convert(ord(substr($str,$len,1)),10,36) . '-'; 
    } 
    return $enc; 
} 


function pj_decode($str) { 
    $ords = explode('-',$str); 
    $c = count($ords); 
    while ($c--) { 
     $dec .= chr(base_convert($ords[$c],36,10)); 
    } 
    return $dec; 
} 
相關問題