본문 바로가기
Program/TempPHP(스팸방지)

PHP 5강 변수의 글자 수를 측정해보자!

by 한빛가람 2016. 6. 1.
반응형





웹을 돌아다닌다거나, 기타 SNS나 회원가입 페이지 등에서 많이 보셨을거라 생각합니다.

특히 이름칸이라던가 이메일, 기타 비밀번호등에 글자 수 제한을 걸어두는 경우를 말이죠.

▲ 트위터에서 흔히 발생하는 글자 수 제한(예시) 빨간부분이 지정 글자 수(140자)를 넘긴 것이다.

위 이미지 같이 저런 상황에서도 이용하기도 하고, 글자수 측정은 온라인 이력서 등에서도 사용하기도 합니다.

심지어 교육쪽으로 가보면 초~고등학생의 나이스에서도 3,000바이트 제한으로 활동내용을 기록할 수 있도록 사용하기도 합니다.


이번 강좌에서는 PHP에서 변수를 이용한 글자 수 제한을 알아보도록 하겠습니다.


먼저, 하기전에 이론 하나 설명하고 가겠습니다.


한글은 바이트로 세면 몇 바이트일까요?


유명한 이야기로

한글은 바이트로 세면 2바이트(2byte, 16bit)입니다. 단 이 조건은 EUC-KR 문자셋에 한해 가능하지요!


제 강좌에서는 UTF-8을 사용하니, UTF-8 기준으로 잡겠습니다.

Q."에이 그거나 그거나 차이가 있어?"

A."차이가 있을 수 밖에 없징~! 그래도 이름이 다르잖아?"


보통 UTF-8에서는 한글의 한 글자를 3바이트(3byte, 24bit)를 사용합니다. 


한마디로 정리하자면, 저희가 글자 수 제한을 위해 입력할 수는 개당 1바이트(아스키코드, 영문자 등)가 아닌, 3바이트(영어를 제외한 기타 다국어 포함)인 셈이죠.


아직도 이해가 안가셨다면, 그냥 우리가 글자수 제한을 분명 12글자로 지정했다면, 한글로 4글자밖에 못쓴단 소리에요. UTF-8이라는 문자셋에서는 한글이 보통 3바이트니까.


자, 테스트를 해보면


▲ "한글입니다" 라는 단어의 글자 수를 센 모습. 글자 수 단위가 아니라 바이트 단위로 세고 있음을 알 수 있다.

이미 눈치 채셨겠지만, 이번에 사용할 함수는 strlen입니다.

하지만, 한글이 한글자로 출력 되기 위해 strlen은 과감히 버리고, mb_strlen을 사용하도록 하겠습니다.


PHP.net에서는 이 함수를

mixed      mb_strlen   ( string        $str      [, string        $encoding = mb_internal_encoding() ] )

이렇게 나타내고 있습니다.


해석하자면,


mb_strlen("안녕하세요", "UTF-8"); //5바이트


이렇게 사용하는 거지만, UTF-8은 기본 값이니


mb_strlen("안녕하세요"); 


이렇게 약칭으로 사용하셔도 됩니다.


strlen 함수의 경우에는, 순수한 안녕하세요 라는 글자가 15글자로 출력됩니다.

mb_strlen 함수의 경우에는 순수한 안녕하세요 라는 글자가 5글자로 출력됩니다.


strlen 함수의 출력 : 13글자 mb_strlen 함수의 출력 : 5글자

결국 이런 식으로 사용하게 되는 겁니다.


제가 사용한 코드의 결과는

저 페이지 안에 있습니다.


감사합니다.


아래의 사랑표(하트)버튼을 눌러주시면 블로그에 매우 큰 도움이됩니다. 히히






Copyright © 이동마이의 컴퓨터 하루 & 이서현(myskys2) All Rights Reserved.




반응형
크리에이티브 커먼즈 라이선스
한빛가람 필자가 게시한 대부분의 블로그 게시물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다. 게시물에 CCL이 적용되지 아니하다고 적혀있는 경우엔 본 라이선스 적용 대상이 아닙니다.

댓글