函数重载功能

警告

此功能已从 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()

注意:

不建议在每个目录上下文中使用函数重载选项,因为尚未确认它在生产环境中是否足够稳定,并且可能会导致未定义的行为。

添加注释

用户贡献注释 4 个注释

匿名
8 年前
这有点邪恶,会给你带来很多头痛。
匿名
7 年前
我接手了一个启用了此“功能”的项目……我花了一段时间才弄清楚为什么字符串的行为不符合语言标准。所以,如果你想让成年人哭——一定要启用这个死亡陷阱。
Grandt
10 年前
简而言之,只有在你 100% 确定你的网站上没有任何东西依赖于在 PHP 中操作二进制数据时,才使用 mbstring.func_overload。
Oliver Baltz
14 年前
如果你需要为特定目录(停用)激活重载,请尝试在你的 httpd.conf 中设置一个合适的 php_admin_value,例如

<Directory ...>
...
php_admin_value mbstring.func_overload 7
</Directory>

我不确定是否可以依赖它,但它似乎对我有用。
To Top