鍍金池/ 問答/PHP  HTML/ 幫忙解釋一下8bit編碼方式?

幫忙解釋一下8bit編碼方式?

在yii2框架中看到了php與redis通過socket通信的時(shí)候,框架中計(jì)算字符串的長度和截取返回的信息都是使用的8bit這種編碼方式:

mb_strlen($arg, '8bit')

文檔中沒有關(guān)于該編碼的說明,什么時(shí)候該使用這種編碼方式?這種編碼方式對中文編碼不會有問題?

回答
編輯回答
荒城

PHP支持mbstring.func_overload, 用于解決原生substr無法有效應(yīng)對多字節(jié)編碼字符串問題

mbstring
支持一個(gè)“函數(shù)重載”功能,將對應(yīng)的多字節(jié)版本重載到標(biāo)準(zhǔn)字符處理函數(shù)上,例如你能夠讓這類應(yīng)用在不修改代碼的前提下添加多字節(jié)的處理能力。
比如,啟用函數(shù)重載后,mb_substr() 將會代替 substr() 被調(diào)用。
在很多情況下這個(gè)功能允許讓僅支持單字節(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)是未知的, 所以在計(jì)算字符長度時(shí), 用mb_strlen 8bit來保證計(jì)算字符串長度的正確性(按照1byte = 8bit)

2018年9月1日 07:45