cut_str 함수를 영문과 한글을 같은 길이로 잘라보자. > 그누보드5 팁자료실

그누보드5 팁자료실

cut_str 함수를 영문과 한글을 같은 길이로 잘라보자. 정보

cut_str 함수를 영문과 한글을 같은 길이로 잘라보자.

본문

여러분 모두가 아시다 시피
영문은 한글자당 1바이트
한글은 2바이트 입니다.
그런데 그누보드에서 쓰이는 cut_str함수

/lib/common.lib.php 에 있는 cut_str함수는 바이트 관계없이 그냥 글자수에 맞춰 자릅니다.
이것을 약간만 손보면 영문이든 한글이든 비슷한 길이(글자수가 아닌 width)로 맞춰줄수 있습니다.


function cut_str($str, $len, $suffix="…", $mb_strimwidth=false)
{
    //if로 mb_strimwidth의 불린값을 받아와서 사용할껀지 말껀지 처리
    if ($mb_strimwidth == false) {
        $arr_str = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
        $str_len = count($arr_str);

        if ($str_len >= $len) {
            $slice_str = array_slice($arr_str, 0, $len);
            $str = join("", $slice_str);

            return $str . ($str_len > $len ? $suffix : '');
        } else {
            $str = join("", $arr_str);
            return $str;
        }
    } else {
        //mb_strimwidth를 사용할 경우 아래처럼 처리

        //글자수를 줄이려는 문자열이 인코딩이 어떻게 되는지 판단
        $str_encoding = mb_detect_encoding($str, 'UTF-8, EUC-KR');
        //mb_strimwidth 내장함수를 이용하여 글씨를 자름
        $result_str = mb_strimwidth($str, 0, $len, $suffix, $str_encoding);
        return $result_str;
    }
}

// ex)  cut_str("대한민국 만세", 3, "...", true);



이렇게 간단히 만들어 보았습니다.
이건뭐 php몰라도 자바스크립트 다룰정도 실력이면 충분하네요.
내장함수를 이용하는것이 포인트고 제가 만들었다고 말하기도 민망할 정도니까요...

암튼 이런 소소한 문제로 골머리 앓으시는 분들에게 도움 됬으면 합니다.

mb_strimwidth의 자세함 사용법은 링크로 남겨 둡니다.
링크1은 php.net의 설명
링크2는 잘 설명된 블로그 입니다.
추천
4

댓글 4개

전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT