tonybogdanov/alphabase

PHP的Base-Anything转换

v1.0.1 2021-12-10 10:11 UTC

This package is auto-updated.

Last update: 2024-09-10 16:07:11 UTC


README

Latest Stable Version License Build Coverage

安装

composer require tonybogdanov/alphabase:^1.0

用法

将您想要转换的字符串作为第一个参数传递,输入的字母表(唯一字符的字符串)作为第二个参数,输出字母表作为第三个参数。

转换期望所有输入字符都在输入字母表中找到,并将它们转换为输出字母表中的字符。

如果您的输入字母表包含32个字符,而输出字母表包含64个,您实际上是在从base32转换为base64。

请注意,这里的转换与标准算法(如base64)无关,因此不能互换。

// qett
echo \TonyBogdanov\Alphabase\Converter::convert( 'abacab', 'abc', 'qwerty' );

// abacab
echo \TonyBogdanov\Alphabase\Converter::convert( 'qett', 'qwerty', 'abc' );

注意

在不考虑特殊/填充字符的情况下,无法无歧义地在基数之间进行转换。然而,这样做将迫使您使用一组字符作为输入字母表,并在字母表之外添加一个额外的填充字符,这将使得从base256转换成为不可能,因为没有可用的ASCII字符可以作为填充。

为了解决这个问题,该包将假设每个字母表中的第一个字符作为填充字符。当在输入字符串的开头找到填充字符时,它将被直接翻译为输出字母表的填充字符1:1,而不进行任何转换。这对于输入的开始直到第一个出现其他字符之前是有效的。之后,填充字符将像其他字符一样进行转换。

这种效果意味着您将失去像base32到base128这样的转换的压缩能力,所以请记住这一点。

关于这一点的一个好的考虑是始终选择字母表,使得第一个(填充)字符是输入字符串中(至少在开头)最不可能出现的字符。