글자수에따라 자르기 할때 한글과 영문의 길이가 다르다?! 정보
글자수에따라 자르기 할때 한글과 영문의 길이가 다르다?!본문
간간히 조용히 글올리고 가는 smokingbird입니다.
개발중인 사이트에 사용했던 팁을 소개해볼까 하구요
기능의 효율성이나 실용성에대해선 생각하지않고 만든거라 엉망일 수 있습니다.
기본적으로 그누에서 제공되는 cut_str 로는
영어는 잘되지만 한글은 이상하게 마지막몇글자가 깨지곤했는데
그래서 그 함수를 들여다보니 substr 함수를 사용중이더랍니다.
그래서 mb_substr 함수로 교체해주니 이번엔 길이차이가 이상하게 나던걸로 기억합니다
(오래되서 가물)
그래서 다른방법으로 시도했습니다.
lib/common.lib.php 의 1000번줄쯤입니다.
/*function cut_str($str, $len, $suffix="…")
{
global $g4;
$s = substr($str, 0, $len);
$cnt = 0;
for ($i=0; $i<strlen($s); $i++)
if (ord($s[$i]) > 127)
$cnt++;
if (strtoupper($g4['charset']) == 'UTF-8')
$s = substr($s, 0, $len - ($cnt % 3));
else
$s = substr($s, 0, $len - ($cnt % 2));
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}*/==>원래함수
function cut_str($str, $len, $suffix="…")
{
global $g4;
$s = mb_strimwidth($str, 0, $len*2,"","utf-8");
$cnt = 0;
for ($i=0; $i<strlen($s); $i++)
if (ord($s[$i]) > 127)
$cnt++;
$s = mb_strimwidth($str, 0, $len*2,"","utf-8");
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}///변환된함수
계산한건아니고 한 열번 스무번 함수를 이리저리 바꿔가면서 영문과 한글이 모두 같은위치에서 마무리되도록 만들었습니다.
사용 언어코드는 utf-8을 대상으로 해보았습니다.
무식해서 멀티바이트용 함수를 그냥 utf-8로 사용 ...
개발중인 사이트에 사용했던 팁을 소개해볼까 하구요
기능의 효율성이나 실용성에대해선 생각하지않고 만든거라 엉망일 수 있습니다.
기본적으로 그누에서 제공되는 cut_str 로는
영어는 잘되지만 한글은 이상하게 마지막몇글자가 깨지곤했는데
그래서 그 함수를 들여다보니 substr 함수를 사용중이더랍니다.
그래서 mb_substr 함수로 교체해주니 이번엔 길이차이가 이상하게 나던걸로 기억합니다
(오래되서 가물)
그래서 다른방법으로 시도했습니다.
lib/common.lib.php 의 1000번줄쯤입니다.
/*function cut_str($str, $len, $suffix="…")
{
global $g4;
$s = substr($str, 0, $len);
$cnt = 0;
for ($i=0; $i<strlen($s); $i++)
if (ord($s[$i]) > 127)
$cnt++;
if (strtoupper($g4['charset']) == 'UTF-8')
$s = substr($s, 0, $len - ($cnt % 3));
else
$s = substr($s, 0, $len - ($cnt % 2));
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}*/==>원래함수
function cut_str($str, $len, $suffix="…")
{
global $g4;
$s = mb_strimwidth($str, 0, $len*2,"","utf-8");
$cnt = 0;
for ($i=0; $i<strlen($s); $i++)
if (ord($s[$i]) > 127)
$cnt++;
$s = mb_strimwidth($str, 0, $len*2,"","utf-8");
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}///변환된함수
계산한건아니고 한 열번 스무번 함수를 이리저리 바꿔가면서 영문과 한글이 모두 같은위치에서 마무리되도록 만들었습니다.
사용 언어코드는 utf-8을 대상으로 해보았습니다.
무식해서 멀티바이트용 함수를 그냥 utf-8로 사용 ...
추천
5
5
댓글 3개
팁 감사합니다.
한번 이용해봐야겠습니다.
감사합니다.
감사합니다.
감사합니다. 한방에 해결했습니다...^^