2012-02-13 54 views
2

我想獲得Shift-jis和Utf-8的strlen(),然後比較它們。 一個字符串可以混合使用「ああ12345678sdfdszzz」。我試圖使用strlen,但它會產生不同的結果。 mb_strlen也沒有幫助,因爲這是一個混合字符串。如何strlen多語言字符串

例如:

ああ12345678 >> strlen() = 24 chars 
ああああああああああああああああ >> strlen() = 48 chars 
ああああああああああああああああああ >> strlen() = 54 chars 

這似乎是沒有規則。那麼什麼是最好的方式來計算strlen和比較它們在多語言

+0

從你的例子來看,'あ'在後兩個例子是3每個字節(可能是UTF-8)。但這與第一個例子並不完全相關。那麼這些字符串究竟是如何構建的? – Gumbo 2012-02-13 07:27:55

+0

那個角色是平假名。我在ubuntu上使用ibus鍵盤輸入。我不知道爲什麼它是3個字節。我認爲它必須是2個字節。我想知道這是否有一個真正的規則。 – Emerald214 2012-02-13 07:34:35

回答

5

strlen只計算字節數,因此僅用於single-byte character encodings;請使用mb_strlen代替multi-byte character encodings,以代替實際字符。

+0

它是一個混合字符串,我應該傳遞給mb_strlen什麼編碼? utf8或sjis?如果他們鍵入5種語言會怎樣? – Emerald214 2012-02-13 07:04:28

+0

那麼字符編碼如何混合?請注意,US-ASCII是UCS的一個真正的子集,並且在US-ASCII和UTF-8中都是精確編碼的。 – Gumbo 2012-02-13 07:08:48

+0

我很抱歉,您將傳遞給mb_strlen的編碼是什麼?我的意思是mb_strlen的第二個參數。 – Emerald214 2012-02-13 07:15:38

0
$field = $_POST['field']; 
$field_length = mb_strlen($field,'utf-8');