ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PHP] 한글 글자수 세기
    [프로그램]/IT 이야기 2023. 2. 3. 07:20
    728x90

     

    PHP를 이용해

    문자열(글자수)을 세는 함수가 있습니다

    바로

    strlen

    인데요!

     

    만약 아래와 같이

    한글이 포함된 글씨를 세면

    한글 1자마다 2자씩 계산이 된답니다.

    echo strlen("한글입니다"); // 결과값이 5가 아닌 10이 나온다.

     

    영어한 문자당 1byte의 공간을 사용하지만

    한글한 문자에 2byte의 공간을 필요로 하기 때문입니다.

     

    간단하게 설명드리자면

    1 byte127자(-128 ~ 127)를 표현할 수 있는데

    영어는 a ~ z까지 26자 밖에 되지 않기 때문에

    숫자와 같은 문자를 포함해도

    1 byte면 충분하기 때문입니다.

     

    그에 반해

    한글은 '가', '갸', '거', '겨' 부터 시작해

    '힣(?)' 까지

    2,350자나 됩니다!

     

    1 byte로는 표현이 어려워

    2 byte를 이용(32,767자 까지 표현 가능)한 답니다!

     

    그런데 여기서!!

    중국어나 다른 언어까지 표현하기에는

    2 byte도 부족해

    1 ~ 4 byte 까지 사용하는

    UTF-8 인코딩 방식도 있답니다!

     

    우선 여기까지 기본정보를 설명드리고

    인코딩에 대한 자세한 포스팅은

    따로 올리도록 하겠습니다!

     

    그렇다면

    어떻게 한글을 1자로 인식시킬 수 있을까요?

     

    ord라는 php 명령어를 이용할 거예요

    ord 함수

    문자의 아스키 코드(ASCII) 값을 반환해주는 기능을 합니다!

     

    1 byte로 표현할 수 있는

    영어의 아스키코드 최대 값은

    127까지 입니다!

     

    따라서

    아스키코드 값이 127이 넘는 문자만

    갯수를 세서

    byte 수만큼 나누어

    전체 갯수에서 빼는

    함수를 만들어봤습니다

     

    function strlen_korean($str, $isutf8 = "N")
    {
        $max_len = strlen($str);
        $cnt = 0;
        
        for ($i=0; $i<$max_len; $i++)
            if (ord($str[$i]) > 127) // ASCII 127가 넘으면 한글
                $cnt++;
    
    	if( strtoupper($isutf8) == "N" )
    		return $max_len - (int)($cnt / 2);      // 한글은 2 byte
    	else
    		return $max_len - (int)($cnt / 3 * 2);  // UTF8이면 한글은 3 byte(뺄 때는 2배로)
    }

    함수명은 strlen_korean으로 만들어봤습니다

    ㅎㅎㅎ

     

    사용법

    strlen_korea( 문자열, utf8이면 Y 아니면 N 혹은 생략 );

     

    문서가 EUCKR 일 때

    strlen 함수와 결과값 차이입니다!

    참고로 '\n'은 개행문자

    1 byte로 인식 한답니다!!

    테스트를 위해 넣어봤어요

    ㅎㅎㅎ

     

    총 계산된 글자수 14에서

    추가된 한글 바이트 수(5 byte)를 빼서

    '9자'라는 결과를 도출했답니다!

     

     

    그 다음은

    문서가 UTF-8 일 때

    strlen 함수와 결과값 차이입니다!

     

    UTF-8 일 때는

    한글 1자를 3자씩 인식하죠?

    ㅎㅎㅎ

    총 계산된 글자수 19에서

    추가된 한글 바이트 수(10 byte)를 빼서

    '9자'라는 결과를 도출했답니다!

     

     

    그럼 이상

    PHP에서 한글 글자수 세는 방법에 대한

    포스팅을 마치도록 하겠습니다!

     

    728x90

    댓글

Designed by Tistory.