PHP 에서 한글/영어 길이 맞춰서 자르기
PHP 에서 한글과 영어의 길이를 맞춰서 자르는 loose한 코드(UTF-8)
function utf8_strcut( $str, $size )
{
$substr = substr( $str, 0, $size * 2 );
$multi_size = preg_match_all( '/[\\x80-\\xff]/', $substr, $multi_chars );
if ( $multi_size > 0 )
$size = $size + intval( $multi_size / 3 ) - 1;
if ( strlen( $str ) > $size )
{
$str = substr( $str, 0, $size );
$str = preg_replace( '/(([\\x80-\\xff]{3})*?)([\\x80-\\xff]{0,2})$/', '$1', $str );
$str .= '...';
}
return $str;
}
mb_strcut 으로 문장을 자르니 영문자등이 포함되어 있는 경우에 길이가 잘 맞지 않아서 영어랑 한글 길이에 맞춰서 자르는 함수를 여기저기서 찾아봤는데 영 길다란 코드 밖에 없길래 타이핑 하기 귀찮아서 만듬;;; 대강 급조한 코드라 속도나 정확성등에 대해서는 책임질 수 없음;;;
mb_srtcut 을 안쓰고 substr 을 쓰면 마지막 글자가 한글일 경우에 문자가 이상하게 바뀌는데 그런 경우엔 위의 정규식 매치를 변형해서 대강 걸러내면 됨…
게으름이 인생인녀석(…)
+ 글자수가 적을 때 끝선이 잘 안맞는 경향이 있어서 그 문제 해결과 함께 아예 mb_strcut 을 안써도 되도록 조금 개선해서 다시 올렸습니다. 조금 더 범용적으로 쓰일 수 있겠네요..마는..아까의 그 간략한 코드가 그립네요…-_-
Popularity: 1% [?]







iconv_substr를 사용하는 것이 가장 깔끔한 방법 아닐까요 ^^
머털 / PHP 4.x 버전을 쓰고 있거든요=ㅂ=;;
u modifier를 이용하면 UTF-8을 유니코드로 바꿔서 처리해줍니다.
preg_replace(”/(.{$size}).+/u”, “$1…”, $str) 정도로 하면 간단하겠죠? :)
디토 / 그냥 자르기만 하는거라면 그렇게 해도 됩니다만, 이 코드의 주안점은 문자열이 영어로만 되어 있을 경우나 한글로만 되어 있을 경우, 또는 영어 한글이 섞여 있을 경우라도 각 줄의 끝선을 대강이라도 맞춰주는 데 있습니다. :-)
물론 어차피 문자열 길이가 다 같은 것도 아니고, 폰트를 가변으로 바꾸면 어쩔 수 없지않느냐..라고 하신다면 할말 없습죠 ㅡ,.ㅡ;;;
까만것은 글이고 하얀것은 바탕이군요.
꼭 탈족한 시험지를 받아보는 기분입니다. :)