首頁 >後端開發 >php教程 >為何gbk編碼的回傳結果是3?

為何gbk編碼的回傳結果是3?

WBOY
WBOY原創
2016-08-22 11:45:371304瀏覽

php > $s="你好";
php > echo mb_strlen($s,"utf8");
2
utf8返回2,我理解
php > echo mb_strlen($s,"gb2312");
php > echo mb_strlen($s,"gb2312");
php4
這裡返回4,我也理解
php > echo mb_strlen($s,"gbk");
3

這裡我就不懂了?

回覆內容:


php > $s="你好";
php > echo mb_strlen($s,"utf8");
2
utf8返回2,我理解
php > echo mb_strlen($s,"gb2312");
php > echo mb_strlen($s,"gb2312");
php4
這裡返回4,我也理解
php > echo mb_strlen($s,"gbk");

3

這裡我就不懂了?

因為$s是UTF8編碼,你沒有轉成GBK就透過GBK的編碼取得它的長度。 UTF8編碼的你好在GBK上是

麋犲ソ

,所以它的長度是3呀。

應該要這麼乾:

<code>$a = mb_strlen(iconv( 'utf-8','gbk', $s), 'gbk');
$b = mb_strlen(iconv( 'utf-8','gb2312', $s), 'gb2312');
</code>

也就是,GB2312也是錯的。

mb_strlen 是回傳字元數,所以只有回傳2才是正確的,4、3這兩種情況我不知道你是怎麼理解的? 不過$s = "你好" 的時候,

$s🎜 裡存的是UTF8 編碼的字符串(根據你的源文件編碼來),如果把這個編碼的數據用GBK 或者GB2312 來解碼,就可能得到亂碼,所以4、3應該是亂碼的長度。 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn