wikimedia / utfnormal
包含Unicode规范化例程,包括纯PHP实现以及当存在时自动使用'intl' PHP扩展
Requires
- php: >=7.4.3
- ext-mbstring: *
Requires (Dev)
- ext-curl: *
- mediawiki/mediawiki-codesniffer: 41.0.0
- mediawiki/mediawiki-phan-config: 0.12.1
- mediawiki/minus-x: 1.1.1
- ockcyp/covers-validator: 1.6.0
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpunit/phpunit: 9.5.28
Suggests
- ext-intl: Optional extension, for improved performance. PHP code fallback is used instead if ext-intl is not present.
README
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.3(r4965)中引入。在MediaWiki 1.25开发周期中,它从MediaWiki代码库中分离出来,作为一个独立的库发布。