Php Base32或Base64的自定义实现

Php Base32或Base64的自定义实现,php,base64,base32,Php,Base64,Base32,我需要在PHP中自定义Base32或Base64的实现(库或类/函数集) 函数应返回URL安全字符串。我将使用这些函数使字符串URL安全 function base64_url_encode($input) { return strtr(base64_encode($input), '+/=', '-_,'); } function base64_url_decode($input) { return base64_decode(strtr($input, '-_,', '+/='));

我需要在PHP中自定义Base32或Base64的实现(库或类/函数集)


函数应返回URL安全字符串。

我将使用这些函数使字符串URL安全

function base64_url_encode($input) {
 return strtr(base64_encode($input), '+/=', '-_,');
}

function base64_url_decode($input) {
 return base64_decode(strtr($input, '-_,', '+/='));
}

由于您没有访问base64内置函数的权限,我建议您:

<?php

echo bencode("Gabriel Malca");
// R2FicmllbCBNYWxjYQ==

function bencode($string='') {
    $binval = convert_binary_str($string);
    $final = "";
    $start = 0;
    while ($start < strlen($binval)) {
        if (strlen(substr($binval,$start)) < 6)
            $binval .= str_repeat("0",6-strlen(substr($binval,$start)));
        $tmp = bindec(substr($binval,$start,6));
        if ($tmp < 26)
            $final .= chr($tmp+65);
        elseif ($tmp > 25 && $tmp < 52)
            $final .= chr($tmp+71);
        elseif ($tmp == 62)
            $final .= "+";
        elseif ($tmp == 63)
            $final .= "/";
        elseif (!$tmp)
            $final .= "A";
        else
            $final .= chr($tmp-4);
        $start += 6;
    }
    if (strlen($final)%4>0)
        $final .= str_repeat("=",4-strlen($final)%4);
    return $final;
}

function convert_binary_str($string) {
    if (strlen($string)<=0) return;
    $tmp = decbin(ord($string[0]));
    $tmp = str_repeat("0",8-strlen($tmp)).$tmp;
    return $tmp.convert_binary_str(substr($string,1));
}

?>


为什么不呢?手册中到处都有-和所有的注释,dum-te-dum。为什么你需要自定义实现?我需要自定义实现,因为我的主机没有为我提供base64_*功能请看我的答案,你得到了你想要的,你不会得到更多,我想这是唯一正确的答案。这个问题不应该向下修改-出于安全考虑,某些主机上可能会禁用base64_u函数。是的,它几乎破坏了标准的PHP安装,但有时禁用内置函数是值得的。@JohnHunt这也不正确,因为它不是URL安全的。@JonGrant这就是为什么存在
urlencode
urldecode