在yii2框架中看到了php與redis通過socket通信的時候,框架中計算字符串的長度和截取返回的信息都是使用的8bit這種編碼方式:
mb_strlen($arg, '8bit')
文檔中沒有關(guān)于該編碼的說明,什么時候該使用這種編碼方式?這種編碼方式對中文編碼不會有問題?
1 回答

智慧大石
TA貢獻(xiàn)1946條經(jīng)驗 獲得超3個贊
PHP支持mbstring.func_overload, 用于解決原生substr無法有效應(yīng)對多字節(jié)編碼字符串問題
mbstring
支持一個“函數(shù)重載”功能,將對應(yīng)的多字節(jié)版本重載到標(biāo)準(zhǔn)字符處理函數(shù)上,例如你能夠讓這類應(yīng)用在不修改代碼的前提下添加多字節(jié)的處理能力。
比如,啟用函數(shù)重載后,mb_substr() 將會代替 substr() 被調(diào)用。
在很多情況下這個功能允許讓僅支持單字節(jié)編碼的應(yīng)用簡單地和多字節(jié)環(huán)境對接。要使用函數(shù)重載功能,設(shè)置 php.ini 里的 mbstring.func_overload 為正值,就是表示為重載函數(shù)分類的位掩碼組合。
要重載 mail() 函數(shù)需要設(shè)置它為 1。字符串函數(shù)設(shè)置為 2,正則表達(dá)式函數(shù)為 4。 例如,當(dāng)它設(shè)置為 7, mail、strings和 正則表達(dá)式函數(shù)將都會被重載。
那么這種情況下php runtime狀態(tài)是未知的, 所以在計算字符長度時, 用mb_strlen 8bit來保證計算字符串長度的正確性(按照1byte = 8bit)
- 1 回答
- 0 關(guān)注
- 1133 瀏覽
添加回答
舉報
0/150
提交
取消