cut_str 함수를 영문과 한글을 같은 길이로 잘라보자.

여러분 모두가 아시다 시피
영문은 한글자당 1바이트
한글은 2바이트 입니다.
그런데 그누보드에서 쓰이는 cut_str함수

/lib/common.lib.php 에 있는 cut_str함수는 바이트 관계없이 그냥 글자수에 맞춰 자릅니다.
이것을 약간만 손보면 영문이든 한글이든 비슷한 길이(글자수가 아닌 width)로 맞춰줄수 있습니다.

[code]
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);

[/code]

이렇게 간단히 만들어 보았습니다.
이건뭐 php몰라도 자바스크립트 다룰정도 실력이면 충분하네요.
내장함수를 이용하는것이 포인트고 제가 만들었다고 말하기도 민망할 정도니까요...

암튼 이런 소소한 문제로 골머리 앓으시는 분들에게 도움 됬으면 합니다.

mb_strimwidth의 자세함 사용법은 링크로 남겨 둡니다.
링크1은 php.net의 설명
링크2는 잘 설명된 블로그 입니다.
|

댓글 4개

좋은 내용 감사합니다.
감사합니다!
cut_str 함수를 영문과 한글을 같은 길이로 잘라보자.
cut_str 함수를 영문과 한글을 같은 길이로 잘라보자.
댓글을 작성하시려면 로그인이 필요합니다.

그누보드5 팁자료실

+
제목 글쓴이 날짜 조회
10년 전 조회 1.4만
10년 전 조회 1.3만
10년 전 조회 2.1만
10년 전 조회 6,603
10년 전 조회 6,766
10년 전 조회 5,850
10년 전 조회 7,713
10년 전 조회 7,277
10년 전 조회 1만
10년 전 조회 2.5만
10년 전 조회 1.4만
10년 전 조회 8,166
10년 전 조회 1만
10년 전 조회 9,092
10년 전 조회 9,701
10년 전 조회 1.8만
10년 전 조회 7,971
11년 전 조회 4,887
11년 전 조회 7,864
11년 전 조회 8,650
11년 전 조회 1.6만
11년 전 조회 8,008
11년 전 조회 1만
11년 전 조회 1.1만
11년 전 조회 7,658
11년 전 조회 6,296
11년 전 조회 1.2만
11년 전 조회 8,976
11년 전 조회 7,538
11년 전 조회 1만