本特性自 PHP 7.2.0 起廢棄,并且自 PHP 8.0.0 起被移除。 強(qiáng)烈建議不要使用本特性。
你也許常常會(huì)發(fā)現(xiàn)現(xiàn)存的 PHP 應(yīng)用很難運(yùn)行在多字節(jié)環(huán)境下。 發(fā)生這種情況的原因是大多數(shù)那種 PHP 應(yīng)用使用了標(biāo)準(zhǔn)的字符串函數(shù),類(lèi)似 substr(),已知無(wú)法處理多字節(jié)編碼的字符串。
mbstring 支持一個(gè)“函數(shù)重載”功能,將對(duì)應(yīng)的多字節(jié)版本重載到標(biāo)準(zhǔn)字符處理函數(shù)上,例如你能夠讓這類(lèi)應(yīng)用在不修改代碼的前提下添加多字節(jié)的處理能力。 比如,啟用函數(shù)重載后,mb_substr() 將會(huì)代替 substr() 被調(diào)用。 在很多情況下這個(gè)功能允許讓僅支持單字節(jié)編碼的應(yīng)用簡(jiǎn)單地和多字節(jié)環(huán)境對(duì)接。
要使用函數(shù)重載功能,設(shè)置 php.ini 里的 mbstring.func_overload
為正值,就是表示為重載函數(shù)分類(lèi)的位掩碼組合。
要重載 mail() 函數(shù)需要設(shè)置它為 1。字符串函數(shù)設(shè)置為 2,正則表達(dá)式函數(shù)為 4。
例如,當(dāng)它設(shè)置為 7, mail、strings 和 正則表達(dá)式函數(shù)將都會(huì)被重載。
以下列表顯示了重載的函數(shù)。
mbstring.func_overload 的值 | 原始函數(shù) | 重載后的函數(shù) |
---|---|---|
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() |
注意:
不推薦每個(gè)目錄的范圍(context)內(nèi)使用函數(shù)重載選項(xiàng),因?yàn)檫€無(wú)法確定在生產(chǎn)環(huán)境中是否穩(wěn)定,也許會(huì)導(dǎo)致不確定的行為。