php編碼問題

來源:互聯網
上載者:User







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 函數
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.