cut_str 함수를 영문과 한글을 같은 길이로 잘라보자. 정보
cut_str 함수를 영문과 한글을 같은 길이로 잘라보자.관련링크
본문
여러분 모두가 아시다 시피
영문은 한글자당 1바이트
한글은 2바이트 입니다.
그런데 그누보드에서 쓰이는 cut_str함수
/lib/common.lib.php 에 있는 cut_str함수는 바이트 관계없이 그냥 글자수에 맞춰 자릅니다.
이것을 약간만 손보면 영문이든 한글이든 비슷한 길이(글자수가 아닌 width)로 맞춰줄수 있습니다.
이렇게 간단히 만들어 보았습니다.
이건뭐 php몰라도 자바스크립트 다룰정도 실력이면 충분하네요.
내장함수를 이용하는것이 포인트고 제가 만들었다고 말하기도 민망할 정도니까요...
암튼 이런 소소한 문제로 골머리 앓으시는 분들에게 도움 됬으면 합니다.
mb_strimwidth의 자세함 사용법은 링크로 남겨 둡니다.
링크1은 php.net의 설명
링크2는 잘 설명된 블로그 입니다.
영문은 한글자당 1바이트
한글은 2바이트 입니다.
그런데 그누보드에서 쓰이는 cut_str함수
/lib/common.lib.php 에 있는 cut_str함수는 바이트 관계없이 그냥 글자수에 맞춰 자릅니다.
이것을 약간만 손보면 영문이든 한글이든 비슷한 길이(글자수가 아닌 width)로 맞춰줄수 있습니다.
function cut_str($str, $len, $suffix="…", $mb_strimwidth=false)
{
//if로 mb_strimwidth의 불린값을 받아와서 사용할껀지 말껀지 처리
if ($mb_strimwidth == false) {
$arr_str = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
$str_len = count($arr_str);
if ($str_len >= $len) {
$slice_str = array_slice($arr_str, 0, $len);
$str = join("", $slice_str);
return $str . ($str_len > $len ? $suffix : '');
} else {
$str = join("", $arr_str);
return $str;
}
} else {
//mb_strimwidth를 사용할 경우 아래처럼 처리
//글자수를 줄이려는 문자열이 인코딩이 어떻게 되는지 판단
$str_encoding = mb_detect_encoding($str, 'UTF-8, EUC-KR');
//mb_strimwidth 내장함수를 이용하여 글씨를 자름
$result_str = mb_strimwidth($str, 0, $len, $suffix, $str_encoding);
return $result_str;
}
}
// ex) cut_str("대한민국 만세", 3, "...", true);
이렇게 간단히 만들어 보았습니다.
이건뭐 php몰라도 자바스크립트 다룰정도 실력이면 충분하네요.
내장함수를 이용하는것이 포인트고 제가 만들었다고 말하기도 민망할 정도니까요...
암튼 이런 소소한 문제로 골머리 앓으시는 분들에게 도움 됬으면 합니다.
mb_strimwidth의 자세함 사용법은 링크로 남겨 둡니다.
링크1은 php.net의 설명
링크2는 잘 설명된 블로그 입니다.
추천
4
4
댓글 4개
좋은 내용 감사합니다.
감사합니다!
cut_str 함수를 영문과 한글을 같은 길이로 잘라보자.
cut_str 함수를 영문과 한글을 같은 길이로 잘라보자.