zendtech / polyfill-mb-ereg
mb_ereg(), mb_eregi(), mb_ereg_match(), 和 mb_ereg_replace*() 函数的 Polyfill;主要用例是针对 Windows 7.4+ 上的 mbstring。
Requires
- php: ^5.6 || ^7.0 || ^8.0
Requires (Dev)
- php: ^7.3 || ^8.0
- ext-mbstring: *
- laminas/laminas-coding-standard: ~2.3.0
- phpcompatibility/php-compatibility: ^9.3
- phpunit/phpunit: ^9.3
README
安装
composer require zendtech/polyfill-mb-ereg
用法
本包为以下函数提供 Polyfill
- mb_ereg
- mb_eregi
- mb_ereg_match
- mb_ereg_replace
- mb_ereg_replace_callback
- mb_eregi_replace
- mb_regex_encoding
- mb_regex_set_options
它可以安全地与 symfony/polyfill-mbstring 一起使用,因为该 Polyfill 不提供 ereg 函数的 Polyfill。
使用此包的主要原因如下
- 您正在使用 Windows 上的 PHP
- 您在该平台上使用 PHP 7.4+
- 并且您使用的库使用了 mb_ereg 功能
从 PHP 7.4 开始,php.net 停止提供 mbstring 扩展所依赖的 oniguruma 库,转而使用系统包。Microsoft 开始使用 libmbfl 构建其 PHP 包,因为它是 Windows 上大致等效的库。不幸的是,该库不公开 ereg 功能,这意味着针对它构建的任何 PHP 二进制文件都没有此功能。
在大多数情况下,切换到 PCRE 功能是首选的,因为它可以开箱匹配许多多字节序列,特别是当使用带有模式 u
PCRE 标志时。然而,当使用第三方包时,您可能无法控制是否使用 PCRE — 因此才有此包。
注意事项
请注意此 Polyfill 的以下注意事项和行为差异。
-
此包不提供任何
mb_ereg_search
系列函数的 Polyfill,因为这些函数不常用,并且依赖于即使在本地扩展下也易碎的全局状态和指针。 -
对于
mb_ereg()
的 Polyfill-
始终返回布尔值。在 PHP 8 之前的版本中,本地扩展会返回匹配的字节数,如果匹配长度为零,则返回整数 1。由于该函数的典型用例是进行布尔测试,Polyfill 总是返回布尔值。
-
始终将
$matches
设置为数组,即使没有匹配。自 PHP 7.1 以来一直是这样做的,并且没有理由为 PHP 5.6 更改此行为。
-
-
此 Polyfill 不支持在
mb_ereg_replace()
、mb_eregi_replace()
或mb_ereg_replace_callback()
提供的替换中使用的命名反向引用的形式\k''
或\k<>
。这是由于 PHP 中包含的 PCRE 引擎不支持它们。