zendtech/polyfill-mb-ereg

mb_ereg(), mb_eregi(), mb_ereg_match(), 和 mb_ereg_replace*() 函数的 Polyfill;主要用例是针对 Windows 7.4+ 上的 mbstring。

1.0.0 2021-08-06 14:25 UTC

This package is auto-updated.

Last update: 2024-09-10 20:50:29 UTC


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 引擎不支持它们。