expatbase/var/www/html/flarum/vendor/sycho/codecs-base64vlq/Base64.php
2025-08-29 00:22:05 +09:00

92 lines
2.3 KiB
PHP
Executable file

<?php
/**
* @package axy\codecs\base64vlq
* @author Oleg Grigoriev <go.vasac@gmail.com>
*/
namespace axy\codecs\base64vlq;
use axy\codecs\base64vlq\errors\InvalidBase64Input;
use axy\codecs\base64vlq\errors\InvalidBase64;
/**
* Convert binary-to-text
*/
class Base64
{
/**
* The constructor
*
* @param string|string[] $alphabet [optional]
* the transform alphabet.
* Array: number => char
* Or string: index of char => number
* Standard base64 alphabet by default.
*/
public function __construct($alphabet = null)
{
if ($alphabet !== null) {
$this->alphabet = $alphabet;
}
if (!is_array($this->alphabet)) {
$this->alphabet = str_split($this->alphabet);
}
$this->char2int = array_flip($this->alphabet);
}
/**
* Encodes a block of numbers to a base64-string
*
* @param int[]|int $numbers
* @return string
* @throws \axy\codecs\base64vlq\errors\InvalidBase64Input
*/
public function encode($numbers)
{
$chars = [];
$alphabet = $this->alphabet;
foreach ($numbers as $number) {
if (isset($alphabet[$number])) {
$chars[] = $alphabet[$number];
} else {
throw new InvalidBase64Input($number);
}
}
return implode('', $chars);
}
/**
* Decodes a base64-string to a block of numbers
*
* @param string|string[] $based
* the base64-string or the array of characters
* @return int[]
* @throws \axy\codecs\base64vlq\errors\InvalidBase64
*/
public function decode($based)
{
if (!is_array($based)) {
$based = str_split($based);
}
$numbers = [];
$char2int = $this->char2int;
foreach ($based as $char) {
if (isset($char2int[$char])) {
$numbers[] = $char2int[$char];
} else {
throw new InvalidBase64($based);
}
}
return $numbers;
}
/**
* @var string|array
*/
private $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
/**
* @var array
*/
private $char2int;
}