它有点邪恶,会给你带来很多麻烦。
此特性自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>
我不确定是否可以依赖它,但它似乎对我有用。