웹을 돌아다닌다거나, 기타 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.
'Program > TempPHP(스팸방지)' 카테고리의 다른 글
PHP 6강 웹페이지 리퍼러를 조회해보자! (0) | 2016.06.05 |
---|---|
PHP 4강 변수의 자료형을 바꾸어보자! (0) | 2016.04.14 |
PHP 3강 변수의 문자열을 치환(바꿔치기)해보자! (0) | 2016.04.12 |
PHP 2강 문장 출력을 해보자 2차시 PHP 상수(define)가 뭐지? (2) | 2015.02.16 |
PHP 2강 Hello World! 출력으로 PHP 출력구문 파해치기! 2차시 (0) | 2014.12.12 |
댓글