프로그래밍/PHP

[PHP] 문자열 길이 가져오기 (strlen, mb_strlen 함수)

떨어지는 용 2017. 12. 15. 10:20

▶PHP 문자열 길이 가져오기 (strlen, mb_strlen 함수)



▶설명



strlen 함수

PHP 함수인 strlen 함수에 대해 php.net 에서는 아래와 같이 설명하고 있습니다.

문자열 길이를 얻습니다.

그렇지만, 해당 함수는 영문 문자열이 몇 바이트(Byte)인지를 가져오는 함수입니다.
영문은 1 Byte로 계산하지만,
UTF-8 문서에 경우 각 문자를 1~4Byte까지 사용하므로, 한글은 한 글자당 1~4Byte에 길이가 반환되어 정확한 문자열의 길이를 알 수 없습니다.
그렇기 때문에 우리는 이를 해결 할 수 있는 함수인 mb_strlen 에 대해서도 함께 알아보겠습니다.

mb_strlen 함수

PHP 함수인 mb_strlen php.net 에서 strlen과 동일한 설명을 가지고 있습니다.

문자열 길이를 얻습니다.

그러면 무엇이 틀린 걸까요?
그건 바로 사용하는 인수 값이 틀립니다.

strlen은 문자열 하나만을 인수로 사용하지만,
mb_strlen은 문자열과 현재 파일의 인코딩(= 문자셋 혹은 charset )을 인수로 사용합니다.
mb_strlen 함수를 이용하면 한글 문자열 길이도 문제없이 가져올 수 있습니다.

▶사용법


강조 처리된 부분만 필수 입력 사항입니다.

strlen( 문자열 )


mb_strlen( 문자열 ,   인코딩 =  mb_internal_encoding() )


* 인코딩 : 값을 입력하지 않으면, 기본 문자 인코딩에서 사용되는 문자 인코딩을 가져옵니다. [참고 ]


▶strlen 함수 예제



코드

<?php
echo "영어 : ". strlen("Edward").'<br/>';
echo "한글 : ". strlen("반갑수");
?>


결과

영어 : 6
한글 : 9


▶mb_strlen 함수 예제


파일 인코딩이 UTF-8인 경우에 대한 예제입니다. (다른 인코딩이면 어딜 변경해야할지 아실거라 생각합니다.)

코드

<?php
echo "영어 : ". mb_strlen("Edward", "UTF-8").'<br/>';
echo "한글 : ". mb_strlen("반갑수", "UTF-8");
?>


결과

영어 : 6
한글 : 3