utf-8에서 한글,영문 문자열 자르기 질문.. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

utf-8에서 한글,영문 문자열 자르기 질문.. 정보

utf-8에서 한글,영문 문자열 자르기 질문..

본문

// 한글 한글자(2byte, 유니코드 3byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
// 유니코드는 http://g4uni.winnwe.net/bbs/board.php?bo_table=g4uni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다.
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;
}
 
현재 그누보드 common.lib.php파일의 cut_str함수 입니다.
이 함수로 한글을 잘라서 표시 할때  cut_str($str,12,".."); 이런 방식으로 잘라서 쓰고 있습니다.
이게 문제가 되는데요..
$str이 한글일경우 12의 값을 주면 4자가 잘라져 나옵니다..
$str이 영문일경우 12의 값을 주면 12자가 나온답니다..
 
한글과 영문을 비교해서 자를순 없을지..
고수님들의 지도편달 부탁드립니다.

댓글 전체

//    영문인지를 체크하는 함수.
//    영문일때 TRUE 리턴, 아닐때는 FALSE 리턴
//    입력값은 글자단위가 아니라 바이트단위로 입력됨.
function _CheckChar( $strChar ) {
    //    글자를 바이너리 10000000 과 비트 AND연산후 10000000 이 되는지를 검사.
    return ( ($strChar & chr(128)) == chr(128) ) ? FALSE : TRUE;
}

1 이 나오믄 영문
음.. 감사합니다.. 간단히 해결되었군요..

// 한글 한글자(2byte, 유니코드 3byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
// 유니코드는 http://g4uni.winnwe.net/bbs/board.php?bo_table=g4uni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다.
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'){
if (CheckChar($s)==TRUE){
$s = substr($s, 0, ($len/1.8) - ($cnt % 3));
}else{
$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 CheckChar( $strChar ) {
    //    글자를 바이너리 10000000 과 비트 AND연산후 10000000 이 되는지를 검사.
    return ( ($strChar & chr(128)) == chr(128) ) ? FALSE : TRUE;
}

몇주전에도 질문을 올린적이 있었는데..
그누보드 메인에도 영문과 한글이 비슷한 크기로 잘리더라구요.. 아무튼 감사합니다..
사이트 전체적으로 수정을 봐야겠군요.. 채택드립니다..^^
12를 주었을때 한글은 6글자가 잘리지 않나요?
글자를 잘라내는게 캐릭터로 계산을 하기때문에 어쩔 수 없는것으로 알고있는데..
한글일때 (2byte) 24로 잡히고 영문일때 12로 잡을 수 있는 방법은 아직 보지를 못했네요.
혹시 그런 방법이 있다면 아주요긴할것 같습니다.
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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