[제나플러스] 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
등록된 댓글이 없습니다.