Php Base32或Base64的自定义实现
我需要在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, '-_,', '+/='));
函数应返回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
。