문자열 자르기 이전표현과 5.0 이상일때 방식(mb_strimwidth ) | Server Side

대개 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
등록된 코멘트가 없습니다.