echo strlen("星");
?>
為什麼echo strlen("星")輸出的是3
strlen() 函數返回字串的長度,以字元計。
1個漢字=2個位元組 輸出來不是2嗎
和編碼有關係嗎?
回複討論(解決方案)
echo mb_strlen("星",'gbk');
1
echo strlen("星")輸出的是3
表示你的程式檔案儲存成了 utf-8 編碼的了
在strlen計算時,對待一個UTF8的中文字元是3個長度
這是固定值,不必理會為什麼.
因為我也不知道.
在utf-8編碼下,一個漢字佔3個位元組,所以返回3.
這個函數和編碼有非常大的關係,需要選用正確的編碼才能得出正確的數值
學習了 編碼要統一啊
utf-8下,中文是3個字元
3 UTF-8
UTF8是中文是三?字元的
echo strlen("星");
我的不管是 utf-8 還是 gbk都是輸出3
重裝後兩個都是輸出 2
我徹底淩亂了
echo mb_strlen("星",'gbk');
1
為什麼
echo mb_strlen("星",'gbk'); 輸出是1
echo mb_strlen("星",‘utf-8’); 我輸出的是1
輸出是2 EUC-CN echo strlen("星");
怎樣在utf-8下輸出3
在gbk下輸出2
將你的檔案儲存為utf-8編碼就是在utf-8下。儲存為ANSI格式就是gbk下。
echo strlen("星");
我的不管是 utf-8 還是 gbk都是輸出3
重裝後兩個都是輸出 2
我徹底淩亂了
不是這個編碼,而是你的php檔案儲存時的編碼。
UTF8 中文是3個字元
GBK 中文是2個字元
請問你這個軟體叫什麼名字,我也想下載
我之前那些代碼都是用Visual Studio 2013 寫的,再把尾碼名改為php,經常出現一些奇怪的問題 最後一個小疑問
echo mb_strlen("星",'gbk');
utf-8 下 輸出 2
ansi 下 輸出 1
echo mb_strlen("星",'utf-8');
utf-8 下 輸出 1
ansi 下 輸出 1
這個是怎麼一回事??
不是這個編碼,而是你的php檔案儲存時的編碼。
UTF8 中文是3個字元
GBK 中文是2個字元
不可以轉碼嗎? 不可以!
只是通知瀏覽器用 charset 指定的字元集解釋內容
如果你的程式檔案是 utf-8 的,那麼聲明 charset=gbk 只會導致亂碼
而沒有 反而會因瀏覽器的自動識別功能,不出現亂碼
設定檔案的編碼和聲明charset是不同的,如果需要設定檔案編碼,一般的軟體就可以解決,如notepad++
echo mb_strlen("星",'gbk');
utf-8 下 輸出 2
ansi 下 輸出 1
echo mb_strlen("星",'utf-8');
utf-8 下 輸出 1
ansi 下 輸出 1
這個是怎麼一回事??
請問你這個軟體叫什麼名字,我也想下載
我之前那些代碼都是用Visual Studio 2013 寫的,再把尾碼名改為php,經常出現一些奇怪的問題
editplus ?於mb_strlen 可以看看?? http://developer.51cto.com/art/201105/263103.htm
可以這樣理解。
echo mb_strlen("星",'gbk');
utf-8 下 輸出 2 // 一個中文在utf-8下佔三個位元組,在gbk下佔兩個位元組, 以gbk算的話,就是3/2 = 1.5個字元,半個字元也算一個,所以輸出2
ansi 下 輸出 1
echo mb_strlen("星",'utf-8');
utf-8 下 輸出 1
ansi 下 輸出 1 // 這裡就是2/3 小於1,也是按1算。
所以用mb_strlen 檢測字串包含的字元數時,編碼統一就不會有問題了。
謝謝大家,我懂了
echo mb_strlen("星",'gbk');
utf-8 下 輸出 2
ansi 下 輸出 1
echo mb_strlen("星",'utf-8');
utf-8 下 輸出 1
ansi 下 輸出 1
這個是怎麼一回事??
不同的環境中出現了不同的結果,這是因為你錯誤的使用了參數造成的!
mb 系列函數的 encoding 參數用於指明被操作的字串的字元集,給錯了自然結果也就錯了
所以在使用時應用 mb_detect_encoding 或 mb_check_encoding 函數取得字串實際的字元集
$s = '星';$charset = mb_detect_encoding($s, 'utf-8, gbk');echo mb_strlen($s, $charset);
$charset = mb_check_encoding($s, 'utf-8') ? 'utf-8' : 'gbk';echo mb_strlen($s, $charset);
由於 mb_detect_encoding 容易出現誤判,所以新增了比較準確的 mb_check_encoding 函數