대개 PHP로 게시판을 만든다거나, 최근게시물을 뽑아온다거나 하는 등의 작업을 할 때면
정해놓은 가로크기(wIdth) 보다 글자수가 많은 경우 이를 잘라주어야 하는 경우를 만날 때가 많습니다.
function cut_str($msg,$cut_size)
{
if($cut_size<=0) return $msg;
if(ereg("\[re\]",$msg)) $cut_size=$cut_size+4;
for($i=0;$i<$cut_size;$i++) if(ord($msg[$i])>127) $han++; else $eng++;
$cut_size=$cut_size+(int)$han*0.6;
$point=1;
for ($i=0;$i
{
if ($point>$cut_size) return $pointtmp."...";
if (ord($msg[$i])<=127)
{
$pointtmp.= $msg[$i];
if ($point%$cut_size==0) return $pointtmp."...";
}
else
{
if ($point%$cut_size==0) return $pointtmp."...";
$pointtmp.=$msg[$i].$msg[++$i];
$point++;
}
$point++;
}
return $pointtmp;
}
이를 귀찮게 생각한 나머지 일부 PHP개발자들은 글자수를 원하는대로 자를수 있는 갖가지의
Function 을 만들어서 사용해오곤 했으나.. PHP5 버전부터는 이러한 불편함을 한번에 해결해 줄수 있는
명령이 새로이 추가된 바 있으니.. 이 명령이 바로
mb_strimwidth라 할 수 있겠습니다.
stringmb_strimwidth( string$str, int$start, int$width[, string$trimmarker[, string$encoding]] )
위 구문이 php.net의 기본 구문이나. 이를 쉽게 풀어보면 아래와 같습니다.
mb_strimwidth('텍스트','시작위치','끝위치',"끝에붙일말","언어코드");
간략하게 기술해놓은 아래의 예제를 보시면 더욱 쉽게 이해하실 수 있습니다.
$text = '가나다라마바사';
$strim = mb_strimwidth($text, '0', '5', '...', 'utf-8');
echo $strim;
결과 = 가나다라마...
UTF-8로 정의된 $text의 값을 0번째 뒤부터 5번째 글자까지 자르고, 마지막에 ... 를 붙이는 일괄작업을 이 mb_strimwidth 명령 하나만으로 간편하게 지정할 수 있습니다.
$text = '가나다라마바사';
$strim = mb_strimwidth($text, '2', '6', '..', 'utf-8');
echo $strim;
결과 = 다라마바..
UTF-8로 정의된 $text의 값을 2번째 뒤부터 6번째 글자까지 자르고, 마지막에 .. 을 붙입니다.
대개 euc-kr로 정의된 문자는 한글 1자를 총 2개의 글자수를 가진 것으로 인식하기 때문에
보다 정확한 처리를 위해서라면 utf-8 로 변수값을 정의하는 것이 유리하다고 할 수 있습니다.
echo strlen("가나다"); => 6
echo mb_strlen("가나다"); => 3
따라서 PHP5 버전 이상의 환경이 구축된 서버를 이용하여 한글 자르기와 관련한 작업을 한다면
UTF-8을 기본언어셋으로 설정하여 mb_strimwidth 명령을 통해 작업의 간편화를 도모하시는 것이
여러모로 유리하다고 할 수 있겠죠?
Comment Write
Comment List