본문 바로가기
APM

UTF-8에서 한글자르기

by 누피짱 2009. 4. 25.

<?php
$a = '한글hangul도 포함include되었습니다.';

/**
* cut string in utf-8
* @author gony (http://mygony.com)
* @param $str    source string
* @param $len    cut length
* @param $checkmb if this argument is true, function treat multibyte character as two bytes. default value is false.
* @param $tail    abbreviation symbol
* @return string  processed string
*/
function strcut_utf8($str, $len, $checkmb=false, $tail='...') {
  preg_match_all('/[\xEA-\xED][\x80-\xFF]{2}|./', $str, $match);
  $m    = $match[0];
  $slen = strlen($str);  // length of source string
  $tlen = strlen($tail); // length of tail string
  $mlen = count($m);    // length of matched characters

  if ($slen <= $len) return $str;
  if (!$checkmb && $mlen <= $len) return $str;
 
  $ret  = array();
  $count = 0;
 
  for ($i=0; $i < $len; $i++) {
    $count += ($checkmb && strlen($m[$i]) > 1)?2:1;
    if ($count + $tlen > $len) break;
    $ret[] = $m[$i];
  }
  return join('', $ret).$tail;
}

echo strcut_utf8($a, 15);
?>

파라미터 설명
String $str : 원본 문자열
Integer $len : 문자열을 자를 길이
Boolean $checkmb : 이 값을 true로 하면 한글을 영문2자와 같이 취급한다. 기본값은 false
String $tail : 생략후 붙일 줄임 기호

반환값
{String} 처리된 문자열

주의!! 이 함수는 UTF-8 문자열을 다룹니다. 다른 charset에는 적용되지 않습니다.

원본글 : http://mygony.com/archives/1110



출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=55142

댓글