[PHP] utf-8 문자열을 주어진 바이트로 자르기
php 에서 제공하는 substr 함수 등을 이용해 주어진 문자를 특정 바이트로 잘라야 하는 경우 영문이나 숫자는 문제가 되지 않지만 한글 등 utf-8 문자에서는 마지막 문자가 정상적으로 표시되지 않는 등의 문제가 발생한다. 이런 경우에 사용하고자 아래 함수를 만들었다.
function getSubstring($str, $length)
{
$str = trim($str);
if (strlen($str) <= $length)
return $str;
$strArr = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
$cutStr = '';
foreach ($strArr as $s) {
$len1 = strlen($s);
$len2 = strlen($cutStr) + $len1;
if ($len2 > $length)
break;
else
$cutStr .= $s;
}
return $cutStr;
}
getSubstring 함수는 주어진 문자열을 주어진 길이(byte) 만큼 자른 후 리턴한다. 만약 주어진 길이만큼 자를 때 마지막 문자가 정상적인 문자가 아닌 경우는 그 전 문자까지 리턴한다.