strlen, strpos, strimwidth, substr, mb_strimwidth
이와 같은 함수를 쓰는 경우 길이가 엉뚱하게 나오는 경우가 있다.
이유는 아래 출처와 같은 이유이다
또한 mb_ 함수를 사용하지 않으면 길이는 잘잡는경우가 있으나 한글 문자 깨짐 문제가 발생한다.
그래서 일단 관련함수를 전부 mb_.... 함수로 사용하고
길이가 엉뚱하게 나오는 경우 일정이상의 길이가 넘어가면 한번더 자르는 것과 같은 방법을 사용했다.
아래 출처 : https://chongmoa.com:45183/php/817
php 소스 파일이 "유니코드(UTF-8)" 인코딩으로 되어 있을 경우, 한글 문자열의 정확한 글자 수를 구하는 방법
"유니코드(UTF-8)" 인코딩에서, 한글 1글자는 3바이트입니다. 다만, 영문이나 공백문자나 기호 등은 여전히 1바이트입니다.
따라서 그냥 strlen() 함수로, 한글 글자 수를 구하면, 글자 수가 아니라, 바이트 수만 나옵니다.
이때는
mb_strlen("한글문자열", "UTF-8")
이런 함수를 사용하면, 정확한 글자 수를 구할 수 있습니다. 그런데 이 함수는 2바이트 문자열을 다루는 외부 모듈을 로딩해 주어야 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
<?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자로 인식) // iconv_substr $fir_name = iconv_substr( '총모아' ,0,1, 'utf-8' ); $last_name = iconv_substr( '총모아' ,2,2, 'utf-8' ); $view_name = $fir_name . "*" . $last_name ; // 가운데만 *표 ?> |