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

본문 바로가기
 

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

페이지 정보

작성자 차동박 이름으로 검색 댓글 0건 조회 10,570회 작성일 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건 12 페이지
MySQL Tip 목록
번호 제목 글쓴이 조회 날짜
45 차동박 이름으로 검색 10812 08-24
44 차동박 이름으로 검색 10806 09-02
43 차동박 이름으로 검색 10774 12-19
42 차동박 이름으로 검색 10764 08-18
41 차동박 이름으로 검색 10757 08-07
40 차동박 이름으로 검색 10742 12-20
39 차동박 이름으로 검색 10734 08-07
38 이름으로 검색 10734 08-04
37 차동박 이름으로 검색 10725 08-02
36 차동박 이름으로 검색 10718 08-07
35 no_profile human 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10705 09-07
34 차동박 이름으로 검색 10667 08-06
33 차동박 이름으로 검색 10642 08-23
32 차동박 이름으로 검색 10604 12-14
열람중 차동박 이름으로 검색 10571 12-16
30 차동박 이름으로 검색 10523 08-07
29 차동박 이름으로 검색 10477 10-25
28 차동박 이름으로 검색 10469 09-13
게시물 검색