[제나플러스] utf-8에서 게시글 제목 끝부분이 잘릴경우... > 팁앤테크

본문 바로가기
사이트 내 전체검색

팁앤테크

[제나플러스] utf-8에서 게시글 제목 끝부분이 잘릴경우...

페이지 정보

본문

저같은 경우 20100104 버전의 common.lib 파일을 사용하면 게시글 제목 끝부분이 잘려버립니다.
그래서 그 이전 버전 common.lib 파일을 적용해 보니 괜찮구요.

혹 저같은 문제 있으신분들, 아래와 같이 해보세요.

lib/common.lib.php 파일을 열어서

=============================================================

// 한글 한글자(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;
}
*/

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

    $s = substr($str, 0, $len);
    $cnt = 0;    // 마지막 글자에서 잘린 후 남겨진 바이트 수

    $s_len = strlen($s);

    // UTF-8 마지막 글자 깨짐 처리
    if (strtoupper($g4['charset']) == 'UTF-8') {
        for ($i=0; $i<$s_len; $i++) {

            $oc = ord($s[$i]);

            if ( ($oc & 0xF8) == 0xF0 )        // 4byte
            {
                if ($i+4 >= $s_len) { $cnt = ($s_len-$i)%4;    break; }
                else $i+=3;
            }
            else if ( ($oc & 0xF0) == 0xE0 )    // 3byte
            {
                if ($i+3 >= $s_len) { $cnt = ($s_len-$i)%3;    break; }
                else $i+=2;
            }
            else if ( ($oc & 0xE0) == 0xC0 )    // 2byte
            {
                if ($i+2 >= $s_len) { $cnt = ($s_len-$i)%2;    break; }
                else $i++;
            }
            else                                    // 1byte
                $cnt = 0;
        }
        if ($cnt)
            $s = substr($s, 0, $s_len - $cnt);
    }
    else    // EUC-KR, 마지막 글자 깨짐 처리
    {
        for ($i=0; $i<$s_len; $i++) {

            $oc = ord($s[$i]);
            if ( $oc > 0x7F )
            {
                if ($i+2 >= $s_len ) { $cnt = ($s_len-$i)%2;    break; }
                else $i++;
            }
            else
                $cnt = 0;
        }
        if ($cnt)
            $s = substr($s, 0, $s_len - $cnt);
    }

    if (strlen($s) >= strlen($str))
        $suffix = "";
    return $s . $suffix;
}

=================================

이 부분을 찾으신 다음....
/*   */으로 주석 처리 된 것을 푸시고,

그 아래 부분을 다시 /*  */으로 주석 처리하시면 됩니다.

고치면 다음과 같이 됩니다.

=================================

// 한글 한글자(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;
}

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

    $s = substr($str, 0, $len);
    $cnt = 0;    // 마지막 글자에서 잘린 후 남겨진 바이트 수

    $s_len = strlen($s);

    // UTF-8 마지막 글자 깨짐 처리
    if (strtoupper($g4['charset']) == 'UTF-8') {
        for ($i=0; $i<$s_len; $i++) {

            $oc = ord($s[$i]);

            if ( ($oc & 0xF8) == 0xF0 )        // 4byte
            {
                if ($i+4 >= $s_len) { $cnt = ($s_len-$i)%4;    break; }
                else $i+=3;
            }
            else if ( ($oc & 0xF0) == 0xE0 )    // 3byte
            {
                if ($i+3 >= $s_len) { $cnt = ($s_len-$i)%3;    break; }
                else $i+=2;
            }
            else if ( ($oc & 0xE0) == 0xC0 )    // 2byte
            {
                if ($i+2 >= $s_len) { $cnt = ($s_len-$i)%2;    break; }
                else $i++;
            }
            else                                    // 1byte
                $cnt = 0;
        }
        if ($cnt)
            $s = substr($s, 0, $s_len - $cnt);
    }
    else    // EUC-KR, 마지막 글자 깨짐 처리
    {
        for ($i=0; $i<$s_len; $i++) {

            $oc = ord($s[$i]);
            if ( $oc > 0x7F )
            {
                if ($i+2 >= $s_len ) { $cnt = ($s_len-$i)%2;    break; }
                else $i++;
            }
            else
                $cnt = 0;
        }
        if ($cnt)
            $s = substr($s, 0, $s_len - $cnt);
    }

    if (strlen($s) >= strlen($str))
        $suffix = "";
    return $s . $suffix;
}
*/

======================================

추천0

댓글목록

등록된 댓글이 없습니다.

Total 285건 8 페이지
  • RSS
팁앤테크 목록
번호 제목 글쓴이 조회 추천 날짜
110 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15500 0 04-12
109 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15524 0 03-09
108 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15526 0 05-23
107 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15552 0 06-29
106 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15590 0 03-13
105 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15593 0 11-28
104 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15607 0 03-25
103 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15613 0 06-04
102 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15660 0 04-10
101 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15666 0 04-10
100 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15734 0 05-06
99 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15764 0 11-21
98 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15766 0 07-16
97 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15777 0 01-14
96 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15784 0 02-16
95 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15793 0 06-30
94 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15799 0 09-04
93 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15829 0 02-05
92 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15850 0 04-23
91 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15885 1 11-14
90 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15889 0 11-16
89 연후아빠쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15910 0 05-29
88 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15946 0 03-21
87 포인트쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15970 0 02-04
86 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15981 2 03-06

검색

회원로그인

회원가입

사이트 정보

株式会社YHPLUS / 대표 : ZERO
〒140-0011 東京都品川区東大井2-5-9-203
050-5539-7787
오픈카카오톡 (YHPLUS) :
https://open.kakao.com/o/slfDj15d

접속자집계

오늘
985
어제
7,684
최대
8,371
전체
1,679,462
Copyright (c) 株式会社YHPLUS. All rights reserved.