-
[PHP] 한글 글자수 세기[프로그램]/IT 이야기 2023. 2. 3. 07:20728x90
PHP를 이용해
문자열(글자수)을 세는 함수가 있습니다
바로
strlen
인데요!
만약 아래와 같이
한글이 포함된 글씨를 세면
한글 1자마다 2자씩 계산이 된답니다.
echo strlen("한글입니다"); // 결과값이 5가 아닌 10이 나온다.
영어는 한 문자당 1byte의 공간을 사용하지만
한글은 한 문자에 2byte의 공간을 필요로 하기 때문입니다.
간단하게 설명드리자면
1 byte는 127자(-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