최근게시물 게시판 에서 제목 자르기 나름대로 바꾼거
페이지 정보
작성자 차동박 이름으로 검색 댓글 0건 조회 11,159회 작성일 06-12-16 13:30본문
게시물의 제목이 길면 잘라서 나타 낼 수 있습니다.
그런데 한글과 영어의 글자 크기가 달라서 잘랐을때
가나다라마바사...
sssssss...
이렇게 같은 글자 수로 자르면 길이 차이가 심하게 납니다.
그래서 요고를 제 나름대로 바꾼것이 lib.php 파일 900번째 줄 가까이의 문자열 끊기 함수 수정입니다.
// 문자열 끊기 (용장 수정본)
function cut_str($msg,$cut_size) {
if($cut_size<=0) return $msg;
$point=1;
for ($i=0;$i<strlen($msg);$i++) {
if ($point>$cut_size) return $pointtmp."...";
if(ord($msg[$i])>127) {
if ($point==$cut_size) return $pointtmp."...";
$pointtmp.=$msg[$i].$msg[++$i];
$point+=0.4;
}
elseif ( ord($msg[$i])==37 || ord($msg[$i])==92 || ord($msg[$i])==64 ) {
if ($point==$cut_size) return $pointtmp."...";
$pointtmp.=$msg[$i];
$point+=0.4;
}
else {
if ( !( ord($msg[$i])>64 && ord($msg[$i])<91 ) ){$point-=0.1;}
$pointtmp.= $msg[$i];
if ($point==$cut_size) return $pointtmp."...";
}
$point++;
}
return $pointtmp;
}
써보니까 이전보다 확실히 좋네요. 제목들이 그리 많이 차이 나지 않습니다.
// 문자열 끊기 (이상의 길이일때는 ... 로 표시)
function cut_str($msg,$cut_size) {
if($cut_size<=0) return $msg;
if(ereg("\\[re\\]",$msg)) $cut_size=$cut_size+4;
for($i=0;$i<$cut_size;$i++) if(ord($msg[$i])>127) $han++; else $eng++;
$cut_size=$cut_size+(int)$han*0.6;
$point=1;
for ($i=0;$i<strlen($msg);$i++) {
if ($point>$cut_size) return $pointtmp."...";
if (ord($msg[$i])<=127) {
$pointtmp.= $msg[$i];
if ($point%$cut_size==0) return $pointtmp."...";
} else {
if ($point%$cut_size==0) return $pointtmp."...";
$pointtmp.=$msg[$i].$msg[++$i];
$point++;
}
$point++;
}
return $pointtmp;
}
요게 원본입니다.
제로보드를 몰라서 소스 분석없이 함수만 바꾼것입니다. 버그 있으면 원본으로 바꾸시고..
버그 예상되는거 지적좀 해주세요. 전 제가 수정한걸 쓸 예정이라서요..
[이 게시물은 human님에 의해 2007-05-14 17:58:49 bilkboard1에서 복사 됨] [이 게시물은 human님에 의해 2007-05-15 09:09:28 bulk3에서 이동 됨]
그런데 한글과 영어의 글자 크기가 달라서 잘랐을때
가나다라마바사...
sssssss...
이렇게 같은 글자 수로 자르면 길이 차이가 심하게 납니다.
그래서 요고를 제 나름대로 바꾼것이 lib.php 파일 900번째 줄 가까이의 문자열 끊기 함수 수정입니다.
// 문자열 끊기 (용장 수정본)
function cut_str($msg,$cut_size) {
if($cut_size<=0) return $msg;
$point=1;
for ($i=0;$i<strlen($msg);$i++) {
if ($point>$cut_size) return $pointtmp."...";
if(ord($msg[$i])>127) {
if ($point==$cut_size) return $pointtmp."...";
$pointtmp.=$msg[$i].$msg[++$i];
$point+=0.4;
}
elseif ( ord($msg[$i])==37 || ord($msg[$i])==92 || ord($msg[$i])==64 ) {
if ($point==$cut_size) return $pointtmp."...";
$pointtmp.=$msg[$i];
$point+=0.4;
}
else {
if ( !( ord($msg[$i])>64 && ord($msg[$i])<91 ) ){$point-=0.1;}
$pointtmp.= $msg[$i];
if ($point==$cut_size) return $pointtmp."...";
}
$point++;
}
return $pointtmp;
}
써보니까 이전보다 확실히 좋네요. 제목들이 그리 많이 차이 나지 않습니다.
// 문자열 끊기 (이상의 길이일때는 ... 로 표시)
function cut_str($msg,$cut_size) {
if($cut_size<=0) return $msg;
if(ereg("\\[re\\]",$msg)) $cut_size=$cut_size+4;
for($i=0;$i<$cut_size;$i++) if(ord($msg[$i])>127) $han++; else $eng++;
$cut_size=$cut_size+(int)$han*0.6;
$point=1;
for ($i=0;$i<strlen($msg);$i++) {
if ($point>$cut_size) return $pointtmp."...";
if (ord($msg[$i])<=127) {
$pointtmp.= $msg[$i];
if ($point%$cut_size==0) return $pointtmp."...";
} else {
if ($point%$cut_size==0) return $pointtmp."...";
$pointtmp.=$msg[$i].$msg[++$i];
$point++;
}
$point++;
}
return $pointtmp;
}
요게 원본입니다.
제로보드를 몰라서 소스 분석없이 함수만 바꾼것입니다. 버그 있으면 원본으로 바꾸시고..
버그 예상되는거 지적좀 해주세요. 전 제가 수정한걸 쓸 예정이라서요..
[이 게시물은 human님에 의해 2007-05-14 17:58:49 bilkboard1에서 복사 됨] [이 게시물은 human님에 의해 2007-05-15 09:09:28 bulk3에서 이동 됨]
댓글목록
등록된 댓글이 없습니다.