2012-08-08 1 views
2

로 인식되고 :덴마크어 Æ 내가 간단한 코드과 같이했습니다 2 개 문자 하나가 아닌

echo strlen('Grækenland');

과 10

서버는 덴마크에 예상 로케일 대신 11을 반환하는 것 덴마크어로 설정되었지만 여전히 11을 반환합니다 ...

+0

mb_strlen()이 10을 제공합니까? – Sean

+2

'echo mb_strlen ('Grækenland ','UTF-8 ');' – Esailija

+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

답변

1

strlen은 문자열을 바이트 배열로 이해하고 1 바이트 == 1 문자로 가정하는 순진한 PHP 핵심 기능 중 하나입니다. 올바른 인코딩 매개 변수를 사용하여 mb_strlen을 사용하면 문자열의 인코딩에 따라 실제로 문자 수를 계산할 수 있습니다.

+0

UTF-8이 올바른지 추측합니다. 이 경우 인코딩은'æ'가 2 바이트이고 다른 문자는 1 바이트이므로 '11'이됩니다. – Esailija

+0

mb_substr과 mb_strpos를 사용할 필요가있는 것 같습니다 ... – user1559555

+0

설명을 주셔서 감사합니다. (strlen에 많이 의존하지 않고 올바른 함수를 대신 사용합니다). – user1559555

0
<?php 
    echo mb_strlen('Grækenland', 'utf8'); 
?> 
관련 문제