2011-09-24 99 views
6

如何落入以下串的長度是不同的,儘管字符的字符串中的編號是相同的長度是不同的

echo strlen("饈 饉 饅 饊 饌 饢 首 馗 馘")."<BR>"; 
echo strlen("Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ")."<BR>"; 

輸出

35 
26 
+0

@stereofrog例如字母'a'。當我們調整它的unicode值時,我們得到1 –

+0

這就是它的工作原理,例如:echo mb_strlen(「αβγδε」,mb_detect_encoding(「αβγδε」));它輸出5 – Melsi

回答

8

第一批每個字符佔用三個字節,因爲它們在39,000個字符的列表中下降了,而第二個組每個只佔用兩個字節,大約爲400個字節(每個字符所需的字節/字節的數量在UTF-8 wikipedia article。)

strlen計算字符串佔用的字節數,它在Unicode中給出了這樣奇怪的結果。

+0

你能進一步解釋他們如何取三個和兩個字節嗎? –

+0

我並不是Unicode如何工作的專家,但基本上每個字符都是可變數量的字節,並且每個字節的最重要的位告訴讀者長度,或者什麼。當我需要查找時,我只是用Google搜索Unicode。 –

+0

例如字母'a'。當我們strlen的unicode值時,我們得到1 –

0

使用mb_strlen,指望字符提供編碼,strlen

2

它看起來像它的計算所使用的編碼字節數而不是字節。例如,看起來第二個字符串每個非空格字符需要兩個字節,而第一個字符串每個非空格字符需要三個字節。我希望:

echo strlen("A B C D E F G H I") 

打印出17 - 每個ASCII字符一個字節。

我的猜測是,這是所有使用UTF-8編碼 - 這肯定會與變化的表示寬度一致。