글자수에따라 자르기 할때 한글과 영문의 길이가 다르다?! > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

글자수에따라 자르기 할때 한글과 영문의 길이가 다르다?! 정보

글자수에따라 자르기 할때 한글과 영문의 길이가 다르다?!

본문

간간히 조용히 글올리고 가는 smokingbird입니다.

개발중인 사이트에 사용했던 팁을 소개해볼까 하구요

기능의 효율성이나 실용성에대해선 생각하지않고 만든거라 엉망일 수 있습니다.

기본적으로 그누에서 제공되는 cut_str 로는

영어는 잘되지만 한글은 이상하게 마지막몇글자가 깨지곤했는데

그래서 그 함수를 들여다보니 substr 함수를 사용중이더랍니다.
그래서 mb_substr 함수로 교체해주니 이번엔 길이차이가 이상하게 나던걸로 기억합니다
(오래되서 가물)
그래서 다른방법으로 시도했습니다.

lib/common.lib.php 의 1000번줄쯤입니다.

/*function cut_str($str, $len, $suffix="…")
{
    global $g4;

    $s = substr($str, 0, $len);
    $cnt = 0;
    for ($i=0; $i<strlen($s); $i++)
        if (ord($s[$i]) > 127)
            $cnt++;
    if (strtoupper($g4['charset']) == 'UTF-8')
        $s = substr($s, 0, $len - ($cnt % 3));
    else
        $s = substr($s, 0, $len - ($cnt % 2));
    if (strlen($s) >= strlen($str))
        $suffix = "";
    return $s . $suffix;
}*/==>원래함수

function cut_str($str, $len, $suffix="…")
{
    global $g4;

    $s = mb_strimwidth($str, 0, $len*2,"","utf-8");
    $cnt = 0;
    for ($i=0; $i<strlen($s); $i++)
        if (ord($s[$i]) > 127)
            $cnt++;
        $s = mb_strimwidth($str, 0, $len*2,"","utf-8");
    if (strlen($s) >= strlen($str))
        $suffix = "";
    return $s . $suffix;
}///변환된함수

계산한건아니고 한 열번 스무번 함수를 이리저리 바꿔가면서 영문과 한글이 모두 같은위치에서 마무리되도록 만들었습니다.

사용 언어코드는 utf-8을 대상으로 해보았습니다.
무식해서 멀티바이트용 함수를 그냥 utf-8로 사용 ...
추천
5

댓글 3개

전체 3,313 |RSS
그누4 팁자료실 내용 검색

회원로그인

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