로 인식되고 :덴마크어 Æ 내가 간단한 코드과 같이했습니다 2 개 문자 하나가 아닌
echo strlen('Grækenland');
과 10
서버는 덴마크에 예상 로케일 대신 11을 반환하는 것 덴마크어로 설정되었지만 여전히 11을 반환합니다 ...
로 인식되고 :덴마크어 Æ 내가 간단한 코드과 같이했습니다 2 개 문자 하나가 아닌
echo strlen('Grækenland');
과 10
서버는 덴마크에 예상 로케일 대신 11을 반환하는 것 덴마크어로 설정되었지만 여전히 11을 반환합니다 ...
strlen
은 문자열을 바이트 배열로 이해하고 1 바이트 == 1 문자로 가정하는 순진한 PHP 핵심 기능 중 하나입니다. 올바른 인코딩 매개 변수를 사용하여 mb_strlen
을 사용하면 문자열의 인코딩에 따라 실제로 문자 수를 계산할 수 있습니다.
UTF-8이 올바른지 추측합니다. 이 경우 인코딩은'æ'가 2 바이트이고 다른 문자는 1 바이트이므로 '11'이됩니다. – Esailija
mb_substr과 mb_strpos를 사용할 필요가있는 것 같습니다 ... – user1559555
설명을 주셔서 감사합니다. (strlen에 많이 의존하지 않고 올바른 함수를 대신 사용합니다). – user1559555
<?php
echo mb_strlen('Grækenland', 'utf8');
?>
mb_strlen()이 10을 제공합니까? – Sean
'echo mb_strlen ('Grækenland ','UTF-8 ');' – Esailija
도 참조하십시오 : 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