2010-10-29 56 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; 
} 
相关问题