-
PHP UTF-8 문자열 길이 비교하여 자르는 함수 <strcut_utf8>프로그램/php 2013. 10. 1. 22:57PHP UTF-8 문자열 길이 비교하여 자르는 함수 입니다.
완성형 한글 문자열 80바이트만 자를때 substr 함수를 사용 하면
완성형 한글의 경우 한글은 2byte,영어는1byte로 구성되어 substr로 자르면
끝에 위치하는 문자는 운이 없을 경우 한글이 깨지는 경우를 겪곤 합니다.
완성형 한글로 인코딩된 문자열을 십진수로 변환하여
128 보다 작을경우 영문
128 보다 클 경우 한글로 해서 구별 할 수 있게 됩니다.
아래 함수를 사용 하면 됩니다.
function strcut_euckr($msg, $limit) { $msg = substr($msg, 0, $limit); for ($i = $limit - 1; $i > 1; $i--) { if (ord(substr($msg,$i,1)) < 128) break; } $msg = substr($msg, 0, $limit - ($limit - $i + 1) % 2); return $msg; }
요즘 UTF-8로 세팅을 하여 자주 사용 하곤 하는데요 UTF-8일 경우에는 한글 코드가
3byte로 이루어져 더욱더 사용 하기 어렵습니다. 그래서 구글링 끝에 찾아낸 함수 입니다.
위 함수처럼 한글 2byte, 영문 1byte로 잘라서 사용 할 수 있습니다.
function strcut_utf8($str, $len){ preg_match_all('/[\xE0-\xFF][\x80-\xFF]{2}|./', $str, $match); $m = $match[0]; $slen = strlen($str); // length of source string $tail = '...'; $tlen = $tail; // length of tail string if ($slen <= $len) return $str; $ret = array(); $count = 0; for ($i=0; $i < $len; $i++){ $count += (strlen($m[$i]) > 1)?2:1; if ($count + $tlen > $len) break; $ret[] = $m[$i]; } return join('', $ret).$tail; }
'프로그램 > php' 카테고리의 다른 글
[php]eval 함수 이용하여 ajax 간편하게 사용하기 (0) 2013.11.06 [php]POST,GET넘어 온 값 간편하게 처리하기. (0) 2013.10.18 [php]128비트 암호화 클래스 <StringEncrypter> (0) 2013.09.26 [php]unescape (0) 2013.07.21 [php]최근사용된 자동증가값 가져오기 (0) 2013.07.21