최근게시물 게시판 에서 제목 자르기 나름대로 바꾼거 > MySQL Tip

본문 바로가기
 

최근게시물 게시판 에서 제목 자르기 나름대로 바꾼거

페이지 정보

작성자 차동박 이름으로 검색 댓글 0건 조회 10,546회 작성일 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에서 이동 됨]

댓글목록

등록된 댓글이 없습니다.

Total 243건 5 페이지
MySQL Tip 목록
번호 제목 글쓴이 조회 날짜
171 차동박 이름으로 검색 19727 12-19
열람중 차동박 이름으로 검색 10547 12-16
169 차동박 이름으로 검색 10578 12-14
168 차동박 이름으로 검색 19568 12-14
167 차동박 이름으로 검색 18323 11-07
166 차동박 이름으로 검색 10315 11-02
165 차동박 이름으로 검색 17011 10-12
164 차동박 이름으로 검색 17328 10-12
163 차동박 이름으로 검색 17426 10-11
162 차동박 이름으로 검색 18847 10-11
161 차동박 이름으로 검색 30613 10-11
160 차동박 이름으로 검색 17507 10-11
159 차동박 이름으로 검색 21478 10-11
158 차동박 이름으로 검색 18281 10-11
157 차동박 이름으로 검색 18693 09-17
156 차동박 이름으로 검색 17751 09-15
155 차동박 이름으로 검색 27962 08-24
154 차동박 이름으로 검색 17292 08-21
게시물 검색