【问题标题】:PHP encoding to only have letters and numbersPHP编码只有字母和数字
【发布时间】:2010-10-29 08:03:45
【问题描述】:

PHP 中是否有一个编码函数可以对字符串进行编码,结果输出将只包含字母和数字?我会使用 base64,但仍然有一些不是数字/字母数字的东西

【问题讨论】:

  • 它有什么用?我认为这可以是一个具体的答案。
  • 我前段时间问了一个类似的问题:Encoding arbitrary data into numbers?我还没有时间测试答案,但是@Artefacto 看起来很棒
  • 使用 ord() 将所有字符转换为其 ASCII 码?
  • 看来Alphabet::convert($str, Alphabet::BYTE, Alphabet::ALPHANUMERIC) 可能是你想要的,即基础 62 的字母表。您也可以将其限制为小写 (Alphabet::ALPHANUMERIC_LOWERCASE) 或大写 (Alphabet::ALPHANUMERIC_UPPERCASE),但这会产生更长的输出。

标签: php


【解决方案1】:

您可以使用 base32(易于搜索的代码),它是 base64 的一种标准替代方案。或者诉诸bin2hex()pack("H*",$hex) 来反转。然而,十六进制编码会导致大小加倍。

【讨论】:

  • (但如果它的大小很大,并且从文本开始,您可以先压缩它!)
【解决方案2】:

简短的回答是否定的,与 uuencode 相比,base64 使用了一组减少的输出字符,旨在解决大多数字符转换问题 - 但仍然不是 url 安全 (IIRC)。

但是这种机制很简单而且很容易适应 - 我建议看看 base32 编码 - 与 base64 相同,但每个输入字符少一位来创建输出(因此只有 32 个字符的字母表)必需),但使用不同的填充字符('=' 不是 url 安全的)。

通过谷歌快速找到this

【讨论】:

    【解决方案3】:

    任何散列函数(md5、sha1 等)输出都将仅包含十六进制数字,但这并不完全是“编码”。

    【讨论】:

    • 不想散列,因为它需要可恢复。
    • 我知道这是一个额外的步骤,但是当您需要恢复 APC 缓存的密钥时,您不能再次对字符串进行哈希处理吗?
    • 为什么 APC 密钥需要可恢复?它是一个缓存,使用单向编码获取对我来说似乎还不错?
    【解决方案4】:

    您可以使用 a-z/A-Z/0-9 编写自己的 base-62 编码器/解码器。不过,每个 ASCII 字符都需要 3 位数字,所以效率不高。

    【讨论】:

    • 他为什么需要 3 位数字?当然 2 就足够了。
    • 我对此感到困惑,但我认为你是对的。
    【解决方案5】:

    我写这篇文章是为了使用字母、数字和破折号。

    我相信你可以改进它来去掉破折号:

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

    【讨论】:

      【解决方案6】:

      您可以使用基本的md5 哈希函数,它只输出字母数字字符。

      【讨论】:

      • 是的,它的对应物 md5_decode() ;) 说真的,看起来 OP 正在寻找编码/解码对,而不是散列函数
      • 这不是答案,如果您不喜欢花时间寻找真正的答案,请不要发布。这是如此,而不是某种论坛。
      • @tharkun:对此感到抱歉。我认为这已经足够了,因为 md5 文档很清楚。我编辑了我的答案。
      猜你喜欢
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多