如何落入以下串的長度是不同的,儘管字符的字符串中的編號是相同的長度是不同的
echo strlen("饈 饉 饅 饊 饌 饢 首 馗 馘")."<BR>";
echo strlen("Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ")."<BR>";
輸出
35
26
如何落入以下串的長度是不同的,儘管字符的字符串中的編號是相同的長度是不同的
echo strlen("饈 饉 饅 饊 饌 饢 首 馗 馘")."<BR>";
echo strlen("Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ")."<BR>";
輸出
35
26
第一批每個字符佔用三個字節,因爲它們在39,000個字符的列表中下降了,而第二個組每個只佔用兩個字節,大約爲400個字節(每個字符所需的字節/字節的數量在UTF-8 wikipedia article。)
strlen計算字符串佔用的字節數,它在Unicode中給出了這樣奇怪的結果。
你能進一步解釋他們如何取三個和兩個字節嗎? –
我並不是Unicode如何工作的專家,但基本上每個字符都是可變數量的字節,並且每個字節的最重要的位告訴讀者長度,或者什麼。當我需要查找時,我只是用Google搜索Unicode。 –
例如字母'a'。當我們strlen的unicode值時,我們得到1 –
使用mb_strlen,指望字符提供編碼,strlen
它看起來像它的計算所使用的編碼字節數而不是字節。例如,看起來第二個字符串每個非空格字符需要兩個字節,而第一個字符串每個非空格字符需要三個字節。我希望:
echo strlen("A B C D E F G H I")
打印出17 - 每個ASCII字符一個字節。
我的猜測是,這是所有使用UTF-8編碼 - 這肯定會與變化的表示寬度一致。
根據this post on php.net/strlen,PHP將所有傳遞給strlen
的字符串解釋爲ASCII。
我不是PHP的專家,但似乎strlen
它計算字節...有mb_strlen
,其對字符...
編輯 - 進一步參考多字節編碼的作品怎麼看http://en.wikipedia.org/wiki/Variable-width_encoding和ESP。 UTF8請參見http://en.wikipedia.org/wiki/UTF-8和
你是對的:)那他應該用什麼。 – kkszysiu
@stereofrog例如字母'a'。當我們調整它的unicode值時,我們得到1 –
這就是它的工作原理,例如:echo mb_strlen(「αβγδε」,mb_detect_encoding(「αβγδε」));它輸出5 – Melsi