메뉴 건너뛰기

프로그램언어

2015.04.14 19:12

한글자르기 substr

조회 수 25206 추천 수 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
번호 제목 날짜 조회 수
280 이미지 땡겨와서 출력하기 2018.09.28 5294
279 유용한 함수 모음 2014.02.27 21428
278 웹페이지 프린트 하기 html 수준 2014.03.26 19807
277 웹페이지 파싱 2023.01.12 236
276 웹에서 Excel 로 출력하기 2014.03.26 20361
275 웹서버조회 소스 2018.07.24 4553
274 오류 메시지 출력(alert) 및 페이지 이동(refresh) 관련 2017.03.06 18574
273 오늘 날짜 구하기 2019.01.08 1329
272 엔터의 표현 2014.02.27 19538
271 엑셀(*.xls) 화일을 PHP에서 읽기 2017.03.06 17489
270 어떤 스마트폰으로 접속했는지 알아내는 소스 , (안드로이드 아이폰 ) 2014.03.26 17720
269 애니메이션 gif 와 일반 gif 구분 하기 2019.01.16 1320
268 알파벳 순서대로 출력하기 ord(), chr() 2021.03.26 587
267 시간관련함수 2016.12.23 17333
266 세션 시작 / 세션 데이터 추가 / 세션 데이터 삭제 / 세션 종료하기 2017.03.07 19113
265 서브도메인 세션 공유 2021.03.26 592
264 생성된 파일생성날짜 업데이트 만들기 / filemtime 2019.01.16 1379
263 새창열 때 HTTP_REFERER 값넘기는 꽁수 2019.01.08 1462
262 상수, 마법상수, 모든 상수 보기 2021.03.26 240
261 사진이 회전되서 올라갈 경우 2020.05.25 779
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 17 Next
/ 17

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved