2012-08-08 32 views
2

我有一個簡單的代碼如下所示:丹麥Æ被識別爲2個字母,而不是一個

echo strlen('Grækenland');

和它的返回11,而不是預期的10

的服務器是在丹麥,語言環境被設置爲丹麥語,但它仍然返回11 ...

+0

請問mb_strlen()能給你10個嗎? – Sean 2012-08-08 12:06:42

+2

試試'echo mb_strlen('Grækenland','UTF-8');' – Esailija 2012-08-08 12:06:57

+0

另請參閱:http://stackoverflow.com/questions/571694/what-factors-make-php-unicode-incompatible,https:// www.ibm.com/developerworks/library/os-php-unicode/index.html和http://www.joelonsoftware.com/articles/Unicode.html – VolkerK 2012-08-08 12:08:27

回答

1

strlen是一種天真的PHP核心函數,它將字符串理解爲字節數組並假定一個字節==一個字符。使用mb_strlen並使用正確的編碼參數根據字符串的編碼實際計算字符數。

+0

我會做一個有教養的猜測,即UTF-8是正確的在這種情況下編碼是因爲在該編碼中''是2個字節並且其他字符是1個字節長,這給出'11'。 – Esailija 2012-08-08 12:12:33

+0

似乎我需要使用mb_substr和mb_strpos以及... – user1559555 2012-08-08 12:17:12

+0

感謝您的解釋,這是更有幫助的(因爲我不會依賴strlen和/或使用正確的功能)。 – user1559555 2012-08-08 12:17:41

0
<?php 
    echo mb_strlen('Grækenland', 'utf8'); 
?> 
相關問題