pcrov/unicode

Unicode工具函数

0.1.1 2020-10-26 13:33 UTC

This package is auto-updated.

Last update: 2024-09-08 17:00:05 UTC


README

CI Status License Latest Stable Version

Unicode工具函数。

函数

命名空间 pcrov\Unicode.

surrogate_pair_to_code_point(int $high, int $low): int

将UTF-16代理对转换为单个代码点。 维基百科的UTF-16文章解释了这是什么。

utf8_find_invalid_byte_sequence(string $string): ?int

返回第一个无效字节序列的位置或null(如果输入有效)。

utf8_get_invalid_byte_sequence(string $string): ?string

返回第一个无效字节序列或null(如果输入有效)。

utf8_get_state_machine(): array

提供一个状态机,让您逐字节遍历(可能无限)的UTF-8序列。

其形式为[byte => [valid next byte => ...,], ...]

示例使用

function utf8_generate_all_code_points(): string
{
    $generator = function (array $machine, string $buffer = "") use (&$generator) {
        // Completed a UTF-8 encoded code point.
        if ($buffer !== "" && isset($machine["\x0"])) {
            return $buffer;
        }

        $out = "";
        foreach ($machine as $byte => $next) {
            $out .= $generator($next, $buffer . $byte);
        }

        return $out;
    };

    return $generator(utf8_get_state_machine());
}

utf8_validate(string $string): bool

如其名。

数据

test/data目录包含两个文件,包含所有可能的UTF-8编码字符。总共1,112,064个。一个作为纯文本,另一个作为json。这些文件不包括在打包的稳定版本中,但可以使用上面提到的示例函数utf8_generate_all_code_points()生成(返回纯文本字符串。)

摘自Unicode 10.0.0标准

在此处重新创建,以便于参考。没有人喜欢PDF。

表3-6. UTF-8位分布

表3-7. 合法的UTF-8字节序列