[utf-8, PHP5] 한글 자르기
그누보드/lib/common.lib.php line 890
// 한글 한글자(2byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
function cut_str($str, $len, $suffix="…")
{ $s = iconv_substr($str, 0, $len, "utf-8"); //<-- 여기 추가, 아래 주석처리 !
// $s = substr($str, 0, $len);
// $cnt = 0;
// for ($i=0; $i<strlen($s); $i++)
// if (ord($s[$i]) > 127)
// $cnt++;
// $s = substr($s, 0, $len - ($cnt % 2));
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}
* 참고: PHP5에 iconv_substr( string str, int offset [, int length [, string charset]] ) 내장되었네요.
* utf-8 적용시 cut_str()으로 잘 안될 때가 있어서 수정해봤습니다.
// 한글 한글자(2byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
function cut_str($str, $len, $suffix="…")
{ $s = iconv_substr($str, 0, $len, "utf-8"); //<-- 여기 추가, 아래 주석처리 !
// $s = substr($str, 0, $len);
// $cnt = 0;
// for ($i=0; $i<strlen($s); $i++)
// if (ord($s[$i]) > 127)
// $cnt++;
// $s = substr($s, 0, $len - ($cnt % 2));
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}
* 참고: PHP5에 iconv_substr( string str, int offset [, int length [, string charset]] ) 내장되었네요.
* utf-8 적용시 cut_str()으로 잘 안될 때가 있어서 수정해봤습니다.
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 6개
mb_string을 사용하는 것은 어떨까요? extention으로 지원하는데요... (PHP 4 >= 4.0.6, PHP 5)
KOI8-R, EUC-KR, UTF-8 도 가능하고 mb_substr, mb_split, mb_strcut, mb_strlen, mb_substr_count 등과
정규식 함수(mb_ereg...)를 포함하여 웬만한 PHP의 String 함수들은 가능하거든요...
utf8은 바이트수가 3~6 바이트까지 차지하므로(한글은 거의 3바이트) euckr에 비해 1.5배가량 넉넉하게 글자수를 지정해줘야 비슷한 만큼 잘리는거 주의하시고요^^
utf8은 글자 중간에 딱 찝었을때도 이게 한글인지 아닌지 파악이 가능하기때문에 일반적인 멀티바이트 자르기보다 훨씬 루프를 적게 돌고 자를 수 있습니다.
사이트 전체가 utf8로 된 경우라면 활용하세요 (_ _)
function utf8_cutstr($str,$len,$tail='') {
$c = substr(str_pad(decbin(ord($str{$len})),8,'0',STR_PAD_LEFT),0,2);
if ($c == '10')
for (;$c != '11' && $c{0} == 1;$c = substr(str_pad(decbin(ord($str{--$len})),8,'0',STR_PAD_LEFT),0,2));
return substr($str,0,$len) . (strlen($str)-strlen($tail) >= $len ? $tail : '');
}
header('Content-Encoding: UTF-8');
$str ="UTF8로 작성된 한글 메시지 123 ★♧ 家羅多";
for ($i=1,$cnt=strlen($str);$i<=$cnt;$i++) {
echo "{$i}: ". utf8_cutstr($str,$i,'...'). '<br />';
}
function utf8_cutstr($str,$len,$tail='')
{
if ($len < strlen($str)) {
$c = substr(str_pad(decbin(ord($str{$len})),8,'0',STR_PAD_LEFT),0,2);
if ($c == '10')
for (;$c != '11' && $c{0} == 1;$c = substr(str_pad(decbin(ord($str{--$len})),8,'0',STR_PAD_LEFT),0,2));
}
return substr($str,0,$len) . (strlen($str)-strlen($tail) >= $len ? $tail : '');
}
뭐 글자 수 정도로 자르기?;;