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

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

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

mb_strlen($arg, '8bit')

文檔中沒(méi)有關(guān)于該編碼的說(shuō)明,什么時(shí)候該使用這種編碼方式?這種編碼方式對(duì)中文編碼不會(huì)有問(wèn)題?

回答
編輯回答
荒城

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

mbstring
支持一個(gè)“函數(shù)重載”功能,將對(duì)應(yīng)的多字節(jié)版本重載到標(biāo)準(zhǔn)字符處理函數(shù)上,例如你能夠讓這類應(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ù)分類的位掩碼組合。
要重載 mail() 函數(shù)需要設(shè)置它為 1。字符串函數(shù)設(shè)置為 2,正則表達(dá)式函數(shù)為 4。 例如,當(dāng)它設(shè)置為 7, mail、strings和 正則表達(dá)式函數(shù)將都會(huì)被重載。

那么這種情況下php runtime狀態(tài)是未知的, 所以在計(jì)算字符長(zhǎng)度時(shí), 用mb_strlen 8bit來(lái)保證計(jì)算字符串長(zhǎng)度的正確性(按照1byte = 8bit)

2018年9月1日 07:45