wikimedia/utfnormal

包含Unicode规范化例程,包括纯PHP实现以及当存在时自动使用'intl' PHP扩展

4.0.0 2023-04-17 20:37 UTC

This package is auto-updated.

Last update: 2024-09-13 06:39:18 UTC


README

Latest Stable Version License

utfnormal

utfnormal是一个库,包含Unicode规范化例程,包括纯PHP实现以及当存在时自动使用'intl' PHP扩展。

需要关注的主体函数是UtfNormal\Validator::cleanUp()。这将删除非法的UTF-8序列和XML中非法的字符,并在必要时转换为规范化形式C。

如果您知道字符串已经是有效的UTF-8,可以直接调用UtfNormal\Validator::toNFC()、toNFK()或toNFKC();这会将给定的UTF-8字符串转换为规范化形式C、K或KC,如果它还不是这种形式。该函数假定输入字符串已经是有效的UTF-8;如果有损坏的字符,这可能会导致错误的结果。

从绝对意义上讲,性能有些糟糕,尽管在纯ASCII文本上应该很快。 ;) 在可以快速确定已经处于NFC的文本上,它并不太糟糕,但可能会变得非常慢,尤其是对于韩文文本(韩文字符的分解/组合代码特别慢)。

应该在Wikimedia的Phabricator下的"utfnormal"项目中提交错误报告。

重新生成数据表

UtfNormalData.inc和UtfNormalDataK.inc是由"generate.php"脚本从Unicode字符数据库生成的。运行"composer generate"以重建表。要从互联网上获取更新的Unicode数据,请运行"composer generate -- --fetch"。

测试

运行"composer test"将运行语法检查器、PHPUnit一致性测试,并使用来自维基百科的样本文本运行一些基准测试。请用大量盐来衡量所有基准数值。

PHP模块扩展

如果存在'intl' PHP扩展,则使用ICU库函数,这比在纯PHP代码中执行这项工作要快得多。

强烈建议如果可能的话启用此模块:https://php.ac.cn/manual/en/intro.intl.php

此库的旧版本支持一个一次性自定义PHP扩展,但现在已删除。如果您使用过此扩展,请迁移到'intl'扩展。

历史

此库首次在MediaWiki 1.3r4965)中引入。在MediaWiki 1.25开发周期中,它从MediaWiki代码库中分离出来,作为一个独立的库发布。