utf-8에서 한글,영문 문자열 자르기 질문.. 정보
utf-8에서 한글,영문 문자열 자르기 질문..
본문
// 한글 한글자(2byte, 유니코드 3byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
// 유니코드는 http://g4uni.winnwe.net/bbs/board.php?bo_table=g4uni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다.
function cut_str($str, $len, $suffix="")
{
global $g4;
// 유니코드는 http://g4uni.winnwe.net/bbs/board.php?bo_table=g4uni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다.
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;
}
$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;
}
현재 그누보드 common.lib.php파일의 cut_str함수 입니다.
이 함수로 한글을 잘라서 표시 할때 cut_str($str,12,".."); 이런 방식으로 잘라서 쓰고 있습니다.
이게 문제가 되는데요..
$str이 한글일경우 12의 값을 주면 4자가 잘라져 나옵니다..
$str이 영문일경우 12의 값을 주면 12자가 나온답니다..
한글과 영문을 비교해서 자를순 없을지..
고수님들의 지도편달 부탁드립니다.
댓글 전체

// 영문인지를 체크하는 함수.
// 영문일때 TRUE 리턴, 아닐때는 FALSE 리턴
// 입력값은 글자단위가 아니라 바이트단위로 입력됨.
function _CheckChar( $strChar ) {
// 글자를 바이너리 10000000 과 비트 AND연산후 10000000 이 되는지를 검사.
return ( ($strChar & chr(128)) == chr(128) ) ? FALSE : TRUE;
}
1 이 나오믄 영문
// 영문일때 TRUE 리턴, 아닐때는 FALSE 리턴
// 입력값은 글자단위가 아니라 바이트단위로 입력됨.
function _CheckChar( $strChar ) {
// 글자를 바이너리 10000000 과 비트 AND연산후 10000000 이 되는지를 검사.
return ( ($strChar & chr(128)) == chr(128) ) ? FALSE : TRUE;
}
1 이 나오믄 영문

음.. 감사합니다.. 간단히 해결되었군요..
// 한글 한글자(2byte, 유니코드 3byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
// 유니코드는 http://g4uni.winnwe.net/bbs/board.php?bo_table=g4uni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다.
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'){
if (CheckChar($s)==TRUE){
$s = substr($s, 0, ($len/1.8) - ($cnt % 3));
}else{
$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 CheckChar( $strChar ) {
// 글자를 바이너리 10000000 과 비트 AND연산후 10000000 이 되는지를 검사.
return ( ($strChar & chr(128)) == chr(128) ) ? FALSE : TRUE;
}
몇주전에도 질문을 올린적이 있었는데..
그누보드 메인에도 영문과 한글이 비슷한 크기로 잘리더라구요.. 아무튼 감사합니다..
사이트 전체적으로 수정을 봐야겠군요.. 채택드립니다..^^
// 한글 한글자(2byte, 유니코드 3byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
// 유니코드는 http://g4uni.winnwe.net/bbs/board.php?bo_table=g4uni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다.
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'){
if (CheckChar($s)==TRUE){
$s = substr($s, 0, ($len/1.8) - ($cnt % 3));
}else{
$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 CheckChar( $strChar ) {
// 글자를 바이너리 10000000 과 비트 AND연산후 10000000 이 되는지를 검사.
return ( ($strChar & chr(128)) == chr(128) ) ? FALSE : TRUE;
}
몇주전에도 질문을 올린적이 있었는데..
그누보드 메인에도 영문과 한글이 비슷한 크기로 잘리더라구요.. 아무튼 감사합니다..
사이트 전체적으로 수정을 봐야겠군요.. 채택드립니다..^^
12를 주었을때 한글은 6글자가 잘리지 않나요?
글자를 잘라내는게 캐릭터로 계산을 하기때문에 어쩔 수 없는것으로 알고있는데..
한글일때 (2byte) 24로 잡히고 영문일때 12로 잡을 수 있는 방법은 아직 보지를 못했네요.
혹시 그런 방법이 있다면 아주요긴할것 같습니다.
글자를 잘라내는게 캐릭터로 계산을 하기때문에 어쩔 수 없는것으로 알고있는데..
한글일때 (2byte) 24로 잡히고 영문일때 12로 잡을 수 있는 방법은 아직 보지를 못했네요.
혹시 그런 방법이 있다면 아주요긴할것 같습니다.
아.. 방법이 있군요. 스크랩합니다. 좋은정보 감사합니다.

완전하지가 않는군요.. 글자가 한글영문 혼합의 경우 깨집니다..
아.. 방법이 또 있지 않을까요. 스크랩 했으니 지켜보겠으.. -_-+

남는 비트를 잘라야 되는데..이게 또 만만치가 않군요.. utf-8한글의 깨짐현상을 해결한게 많이 있으니 그쪽으로 알아봐야 할듯..

이걸 자르자면 한글자씩 한글인지 아닌지 파악하여 잘라야 겠군요.. 아 관리자님이 좀 알려주시면 감사하련만..

감사합니다. 덕분에 해결했습니다.ㅋ

utf-8에서 한글,영문 문자열 자르기 질문..