這有點邪惡,而且會讓你非常頭痛。
此功能自 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,則 mail、字串和正規表示式函式都會被多載。多載的函式列表如下所示。
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>
我不百分百確定這是否可靠,但對我來說似乎有效。