2010-06-05 36 views

回答

7

需要總是知道字符串的編碼方式,以及它是否是多字節編碼。畢竟,您需要將字符串的編碼作爲第二個參數傳遞給mb_strlen()以獲得可靠的結果,對吧?

傳入數據的編碼將總是以某種方式定義 - 處理表單數據時的頁面編碼;處理數據庫數據時的數據庫連接和表的編碼;等等。這是你的工作,建立流程的方式,你總是知道什麼是在什麼編碼在哪裏。

唯一的例外是當您處理任何不會正確聲明其內容編碼的第三方數據。那時(並且只有這樣)才能使用嗅探功能,如mb-detect-encoding()和同事。請記住,這些函數非常容易出錯,並且只能給你一個有教育意義的猜測,即字符串的編碼方式,而不是可靠的信息。

1

是不是mb_check_encodingmb_detect_encoding應該用於那個?

2

否。字符串是一個字符串。無法確定它是否包含多個字節字符。

你可以用mb_detect_encoding()來猜測,但是你的里程可能會隨字符集和編碼而變化。例如,UTF-8有一個非常獨特的模式,你會得到非常好的結果。但其他編碼,如GB2312,真的很難察覺。

如果您正在設計一個新的協議或系統,最好保留編碼信息。

2

比較strlen和mb_strlen結果,如果它們不匹配,則該字符串包含多字節字符。