PHP UTF-8 문자열 길이 비교하여 자르는 함수 <strcut_utf8>
2014.12.29 18:58
PHP UTF-8 문자열 길이 비교하여 자르는 함수 입니다.
완성형 한글 문자열 80바이트만 자를때 substr 함수를 사용 하면
완성형 한글의 경우 한글은 2byte,영어는1byte로 구성되어 substr로 자르면
끝에 위치하는 문자는 운이 없을 경우 한글이 깨지는 경우를 겪곤 합니다.
완성형 한글로 인코딩된 문자열을 십진수로 변환하여
128 보다 작을경우 영문
128 보다 클 경우 한글로 해서 구별 할 수 있게 됩니다.
아래 함수를 사용 하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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로 잘라서 사용 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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; }
|
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.