这有点邪恶,会给你带来很多头痛。
此功能已从 PHP 7.2.0 开始弃用,并从 PHP 8.0.0 开始移除。强烈建议不要依赖此功能。
您可能会发现很难让现有的 PHP 应用程序在给定的多字节环境中工作。这是因为大多数 PHP 应用程序都是使用标准字符串函数(如 substr())编写的,这些函数众所周知无法正确处理多字节编码的字符串。
mbstring 支持“函数重载”功能,通过在标准字符串函数上重载多字节对应项,使您能够在不修改代码的情况下为这类应用程序添加多字节感知。例如,如果启用了函数重载,则会调用 mb_substr() 而不是 substr()。此功能使在许多情况下,将仅支持单字节编码的应用程序移植到多字节环境变得容易。
要使用函数重载,请在 php.ini 中将 mbstring.func_overload
设置为一个正值,该值表示指定要重载的函数类别的位掩码组合。应将其设置为 1 以重载 mail() 函数。2 用于字符串函数,4 用于正则表达式函数。例如,如果将其设置为 7,则将重载邮件、字符串和正则表达式函数。下面列出了重载函数的列表。
mbstring.func_overload 的值 | 原始函数 | 重载函数 |
---|---|---|
1 | mail() | mb_send_mail() |
2 | strlen() | mb_strlen() |
2 | strpos() | mb_strpos() |
2 | strrpos() | mb_strrpos() |
2 | substr() | mb_substr() |
2 | strtolower() | mb_strtolower() |
2 | strtoupper() | mb_strtoupper() |
2 | stripos() | mb_stripos() |
2 | strripos() | mb_strripos() |
2 | strstr() | mb_strstr() |
2 | stristr() | mb_stristr() |
2 | strrchr() | mb_strrchr() |
2 | substr_count() | mb_substr_count() |
注意:
不建议在每个目录上下文中使用函数重载选项,因为尚未确认它在生产环境中是否足够稳定,并且可能会导致未定义的行为。
如果你需要为特定目录(停用)激活重载,请尝试在你的 httpd.conf 中设置一个合适的 php_admin_value,例如
<Directory ...>
...
php_admin_value mbstring.func_overload 7
</Directory>
我不确定是否可以依赖它,但它似乎对我有用。