5) { $char = $encodes[$val >> ($pos -= 6)]; $encodeChar = self::getSpecialChar($char); $result[] = $encodeChar; $val &= ((1 << $pos) - 1); } } if ($pos > 0) { $char = $encodes[$val << (6 - $pos)]; $result[] = self::getSpecialChar($char); } return implode('', $result); } public static function decode($string) { $decodes = self::getIndexChars(self::ENCODES); $chars = self::getCharArray($string); $pos = 0; $val = 0; $bytes = []; for ($i = 0; $i < count($chars); $i++) { $char = $chars[$i]; if ($char == 'i') { $char = $chars[++$i]; $char = $char == 'a' ? 'i' : ($char == 'b' ? '+' : ($char == 'c' ? '/' : $chars[--$i])); } $val = ($val << 6) | $decodes[$char]; $pos += 6; while ($pos > 7) { $bytes[] = $val >> ($pos -= 8); $val &= ((1 << $pos) - 1); } } return self::bytesToString($bytes); } private static function bytesToString($bytes) { $string = ''; foreach($bytes as $byte) { $string .= chr($byte); } return $string; } private static function stringToBytes($string) { $length = strlen($string); $bytes = array(); for($i = 0; $i < $length; $i++) { if(ord($string[$i]) >= 128){ $byte = ord($string[$i]) - 256; }else{ $byte = ord($string[$i]); } $bytes[] = $byte ; } return $bytes; } }