메뉴 건너뛰기

프로그램언어

2015.04.14 19:12

한글자르기 substr

조회 수 25198 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

완성형 한글의 경우 한글은 2바이트로 영어는 1바이트로 구성되기 때문에 PHP의 substr() 함수를 쓸 때 한글이 깨지는 경우가 있다. 이런 경우 mb_substr() 함수로 대체하면 된다.


substr ($str, $start_Pos, $length);
$Str에 담고 있는 문자열의 $start_Pos부터 길이$length만큼을 잘라내어 반환한다

mb_substr ($str, $start_Pos, $length, $encoding);
$str에 담고 있는 문자열의 $start_Pos부터 길이$length만큼을 잘라내어 $encoding 형식에 맞게 반환한다


mb_substr($str, 0, 10, 'EUC-KR');
mb_substr($str, 0, 10, 'UTF-8');

function strcut_euckr($msg, $limit) {    // 완성형 한글 자르기
    $msg = substr($msg, 0, $limit);
    for ($i = $limit - 1; $i > 1; $i--) {   
        if (ord(substr($msg,$i,1)) < 128) break;
    }
    $msg = substr($msg, 0, $limit - ($limit - $i + 1) % 2);
    return $msg;
}


function strcut_utf8($str, $len, $checkmb=false, $tail='') {  // UTF-8 한글자르기
    /** UTF-8 Format
    * 0xxxxxxx = ASCII, 110xxxxx 10xxxxxx or 1110xxxx 10xxxxxx 10xxxxxx
    * latin, greek, cyrillic, coptic, armenian, hebrew, arab characters consist of 2bytes
    * BMP(Basic Mulitilingual Plane) including Hangul, Japanese consist of 3bytes
    **/
    preg_match_all('/[\xE0-\xFF][\x80-\xFF]{2}|./', $str, $match); // target for BMP
     
    $m = $match[0];
    $slen = strlen($str); // length of source string
    $tlen = strlen($tail); // length of tail string
    $mlen = count($m); // length of matched characters
     
    if ($slen <= $len) return $str;
    if (!$checkmb && $mlen <= $len) return $str;
     
    $ret = array();
    $count = 0;
    for ($i=0; $i < $len; $i++) {
        $count += ($checkmb && strlen($m[$i]) > 1)?2:1;
        if ($count + $tlen > $len) break;
        $ret[] = $m[$i];
    }    
    return join('', $ret).$tail;
}



List of Articles
번호 제목 날짜 조회 수
80 파일을 변수에 담기(ob_start를 이용한 방법) 2021.03.26 676
79 13자리 timestamp 생성하기 file 2020.09.28 649
78 PHP 버전이 낮아 imagerotate() 함수가 없을때 대신 사용하는 함수 2019.12.31 644
77 while, for, foreach 속도 비교 2021.03.26 623
76 다중 파일을 zip으로 묶어받기 2020.06.19 619
75 파일 다운로드 함수(멀티 이어받기/속도제한) 2020.06.19 618
74 알파벳 순서대로 출력하기 ord(), chr() 2021.03.26 583
73 substr(), mb_substr(), iconv_substr() 2021.03.26 564
72 csv파일 다루기. fputcsv(), fgetcsv() 2021.03.26 558
71 서브도메인 세션 공유 2021.03.26 546
70 Javascript 두 좌표 사이의 거리 구하기, 두 좌표의 중앙 좌표 구하기 file 2020.09.23 535
69 네이버 지도 API를 이용한 주소를 좌표로 변환하기 (PHP) 2020.09.22 495
68 CodeIgniter - DB오류체크, 디버깅 여부 설정 2021.03.29 494
67 PHP 쉘 스크립트 2021.03.26 470
66 사업자등록번호 유효성 체크 2020.08.24 470
65 배열 더하기 (+ 를 이용한 배열 합치기 ) 2021.03.26 451
64 멀티 파일다운로드 꽁수로 구현하기 2020.06.19 438
63 주차 , 요일, 해당주의 시작일, 해당주의 종료일 date() 2021.07.08 432
62 DAUM 지도 API 좌표→주소(주소->좌표) 변환 2020.10.05 431
61 경로 제외한 파일 이름만 선택하는 방법, Basename() 2020.11.23 429
Board Pagination Prev 1 ... 8 9 10 11 12 13 14 15 16 17 Next
/ 17

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved