Sunday, April 29, 2007
PHP 예제] 유니코드(UTF-8) 한글 문자열 크기/글자 수 구하기; Unicode String Size
php 소스 파일이 "유니코드(UTF-8)" 인코딩으로 되어 있을 경우, 한글 문자열의 정확한 글자 수를 구하는 방법입니다.
"유니코드(UTF-8)" 인코딩에서, 한글 1글자는 3바이트입니다. 다만, 영문이나 공백문자나 기호 등은 여전히 1바이트입니다.
따라서 그냥 strlen() 함수로, 한글 글자 수를 구하면, 글자 수가 아니라, 바이트 수만 나옵니다.
이때는
mb_strlen("한글문자열", "UTF-8")
이런 함수를 사용하면, 정확한 글자 수를 구할 수 있습니다. 그런데 이 함수는 2바이트 문자열을 다루는 외부 모듈을 로딩해 주어야 사용할 수 있습니다. 참고: ▶▶ 윈도우용 PHP, mbstring 익스텐션(Extension;모듈) 설치/인식 방법
파일명: example.php
(이 예제 소스는, 유니코드(UTF-8) 인코딩으로 저장해야 합니다.)
위의 소스를 도스창(콘솔)에서 직접 실행하면 유니코드 문자가 깨져서 이상한 글자가 나올 것입니다.
php example.php > out.html
이렇게 직접 out.html 이라는 파일로 저장하면, out.html 파일 안에
이런 출력 결과가 들어 있을 것입니다.
유니코드가 아닌, 일반적인 "확장완성형(EUC-KR / CP949)"에서: ▶▶ PHP 예제] 문자열 길이, 한글 글자 수 구하기 함수; CJK String Length
"유니코드(UTF-8)" 인코딩에서, 한글 1글자는 3바이트입니다. 다만, 영문이나 공백문자나 기호 등은 여전히 1바이트입니다.
따라서 그냥 strlen() 함수로, 한글 글자 수를 구하면, 글자 수가 아니라, 바이트 수만 나옵니다.
이때는
mb_strlen("한글문자열", "UTF-8")
이런 함수를 사용하면, 정확한 글자 수를 구할 수 있습니다. 그런데 이 함수는 2바이트 문자열을 다루는 외부 모듈을 로딩해 주어야 사용할 수 있습니다. 참고: ▶▶ 윈도우용 PHP, mbstring 익스텐션(Extension;모듈) 설치/인식 방법
Unicode (UTF-8) 인코딩에서 한글 글자수 출력
파일명: example.php
(이 예제 소스는, 유니코드(UTF-8) 인코딩으로 저장해야 합니다.)
<html>
<head>
<title>PHP Example</title>
</head>
<body>
<?php
// strlen() 함수는, 유니코드(UTF-8) 인코딩에서
// 한글은 3바이트, 영문이나 기호는 1바이트로 반환
print strlen("Cool") . "글자 (영문 바이트 단위)<br />\n";
// 4글자 (영문 바이트 단위)
// 한글 1자는 3글자로 간주
print strlen("똠방각하") . "글자 (영문 바이트 단위)<br />\n";
// 12글자 (영문 바이트 단위)
// 유니코드(UTF-8) 한글 글자수 정확히 구하기
print mb_strlen("똠방각", "UTF-8") . "글자 (한글 1자를 1자로 인식)<br />\n";
// 3글자 (한글 1자를 1자로 인식)
?>
</body>
</html>
<head>
<title>PHP Example</title>
</head>
<body>
<?php
// strlen() 함수는, 유니코드(UTF-8) 인코딩에서
// 한글은 3바이트, 영문이나 기호는 1바이트로 반환
print strlen("Cool") . "글자 (영문 바이트 단위)<br />\n";
// 4글자 (영문 바이트 단위)
// 한글 1자는 3글자로 간주
print strlen("똠방각하") . "글자 (영문 바이트 단위)<br />\n";
// 12글자 (영문 바이트 단위)
// 유니코드(UTF-8) 한글 글자수 정확히 구하기
print mb_strlen("똠방각", "UTF-8") . "글자 (한글 1자를 1자로 인식)<br />\n";
// 3글자 (한글 1자를 1자로 인식)
?>
</body>
</html>
위의 소스를 도스창(콘솔)에서 직접 실행하면 유니코드 문자가 깨져서 이상한 글자가 나올 것입니다.
php example.php > out.html
이렇게 직접 out.html 이라는 파일로 저장하면, out.html 파일 안에
<html>
<head>
<title>PHP Example</title>
</head>
<body>
4글자 (영문 바이트 단위)<br />
12글자 (영문 바이트 단위)<br />
3글자 (한글 1자를 1자로 인식)<br />
</body>
</html>
<head>
<title>PHP Example</title>
</head>
<body>
4글자 (영문 바이트 단위)<br />
12글자 (영문 바이트 단위)<br />
3글자 (한글 1자를 1자로 인식)<br />
</body>
</html>
이런 출력 결과가 들어 있을 것입니다.
유니코드가 아닌, 일반적인 "확장완성형(EUC-KR / CP949)"에서: ▶▶ PHP 예제] 문자열 길이, 한글 글자 수 구하기 함수; CJK String Length
tag: php
PHP
감사합니다. 많은 되었습니다.
<< Home