제로보드 관련된 유용한 정보를 공유하는 곳입니다.
  • 웹미니 한줄 전광판 영역 입니다.
글 수 98

16

조회 수 : 3233 신고 : 0

profile
작성자 : title: [ani]깜빡이는 표정빽짱구
포인트 : 56933 | 레벨 : 25
출처 :  
http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=검색&select_arrange=headnum&desc=asc&no=7072이팁은 제로보드 유용팁란 알릭님의 게시물입니다.

오홀... 제로보드를 써온지가 몇년인데.. 아무리 제가 엔지오에는 잘 않온다고 해도... 어떻게 그럴수가...ㅜ.ㅜ

어제 처음으로 알았습니다.. 검색에 버그가 있다는걸... 그것도 몇년씩이나 고질적으로... 많은분들을 괴롭혀왓다니...

뭐 이제라도 알았으니 다행이죠...

암튼!... 다 잡았습니다... 모르셨던분은 아래 해결책을 적용하기전에 살짝 직접 테스트해보세요 ^^


1. 특수기호 (, [, / 등등 을 입력하고 검색하면 오류...좌악~~~ (아마도 제로보드 최신버전에선 패치되어있는부분입니다)

테스트해보시고 에러나면 수정하세요....

include 폴더의 list_check.php 에서 아래부분을 찾아서 교체해주세요... (해당부분 드레그해서 수정후버전으로 붙여넣기 하시길 권장)


원본:

// 검색어에 해당하는 글자를 빨간;; 색으로 바꾸어줌;;
        if($keyword) {

                $keyword_pattern = "/$keyword/i";
                
                if($sn=="on") $data[name] = preg_replace($keyword_pattern, "<font color=FF001E style=background-color:FFF000;>$keyword</font>", $data[name]);

                if($ss=="on") $data[subject] = preg_replace($keyword_pattern, "<font color=FF001E style=background-color:FFF000;>$keyword</font>", $data[subject]);

                if($ss=="on"&&$setup[cut_length]>0) $setup[cut_length]=$setup[cut_length]+52;
        }

        // ' 등의 특수문자때문에 붙인 (역슬래쉬)를 떼어낸다
        $name=$data[name]=stripslashes($data[name]);  // 이름

        $temp_name = get_private_icon($data[ismember], "2");
        if($temp_name) $name="<img src='$temp_name' border=0 align=absmiddle style='filter:chroma(color=white)'>";


        $subject=$data[subject]=stripslashes($data[subject]); // 제목
        //$subject=$data[subject];
        $subject=cut_str($subject,$setup[cut_length]); // 제목 자르는 부분
        $hit=$data[hit];  // 조회수
        $vote=$data[vote];  // 투표수
        $comment_num="[".$data[total_comment]."]"; // 간단한 답글 수
        if($data[total_comment]==0) $comment_num="";
        if($setup[use_alllist]) $view_file="zboard.php"; else $view_file="view.php";
        // 제목에 링크 거는 부분;
        if($member[level]<=$setup[grant_view]||$is_admin) {
                //if($setup[use_status]&&!$data[is_secret]) $addShowComment = " onMouseOver="showComment('$showCommentStr',true)" onMouseOut="showComment('',false)" ";
                if($setup[use_status]&&!$data[is_secret]) $addShowComment = " title="$showCommentStr" ";
                $subject="<a href="".$view_file."?$href$sort&no=$data[no]" $addShowComment >".$subject."</a>";
        }


수정후:

// ' 등의 특수문자때문에 붙인 (역슬래쉬)를 떼어낸다
        $name=$data[name]=stripslashes($data[name]);  // 이름

        $temp_name = get_private_icon($data[ismember], "2");
        if($temp_name) $name="<img src='$temp_name' border=0 align=absmiddle>";


        $subject=$data[subject]=stripslashes($data[subject]); // 제목
        //$subject=$data[subject];
        $subject=cut_str($subject,$setup[cut_length]); // 제목 자르는 부분
        $hit=$data[hit];  // 조회수
        $vote=$data[vote];  // 투표수
        $comment_num="[".$data[total_comment]."]"; // 간단한 답글 수
        
        // 검색어에 해당하는 글자를 빨간;; 색으로 바꾸어줌;;
          if($keyword) {
            $keyword_pattern = "/".str_replace(" ","\0",preg_quote($keyword,"/"))."/i";
            if($sn=="on") $name = preg_replace($keyword_pattern, "<span style='color:#FF001E;background-color:#FFF000;'>$keyword</span>", $name);
            if($ss=="on") $subject = preg_replace($keyword_pattern, "<span color='FF001E' style='color:#FF001E;background-color:#FFF000;'>$keyword</span>", $subject);
          }

        if($data[total_comment]==0) $comment_num="";
        if($setup[use_alllist]) $view_file="zboard.php"; else $view_file="view.php";
        // 제목에 링크 거는 부분;
        if($member[level]<=$setup[grant_view]||$is_admin) {
                //if($setup[use_status]&&!$data[is_secret]) $addShowComment = " onMouseOver="showComment('$showCommentStr',true)" onMouseOut="showComment('',false)" ";
                if($setup[use_status]&&!$data[is_secret]) $addShowComment = " title="$showCommentStr" ";
                $subject="<a href="".$view_file."?$href$sort&no=$data[no]" $addShowComment >".$subject."</a>";
        }


2. 어느버전부터인지는 모르겟으나 검색어만 하이라이트되는게 아니라 검색어부터 뒤로 한줄이 전부다 하이라이트되는 버그

include 폴더의 list_check.php 에서 <span 으로 검색해보세요 찾으신줄의 뒷부분이  $keyword</span> 으로 되있어야 합니다.. (태그를 열기만하고 않닫아서 생긴오류죠..)


3. where 라고 검색하던가, 좌우지간 단어에 where 가 들어있으면 검색시 오류뜨는 버그 (해결하셨다는분 게시판에가서 ' where ' 로 해보니 역시 오류나더군요..
디비젼관리하는 차원에서 검색문구에 where가 변환되는 과정에서 검색어의 where 도 같이 변환되는게 에러의 이유였습니다.)


_head.php 에서


if(!isblank($keyword)) { 를 찾아서 아랫줄에 다음 한줄을 붙여넣습니다.

$keyword=str_replace("where","tmp_key_tmp", $keyword); //fix by alik


조금더 밑으로 내려가서


$s_que = str_replace("where","where division='$divpage' and ", $s_que); 를 찾은뒤 아랫줄에 다음내용을 붙여넣습니다.


$s_que = str_replace("tmp_key_tmp","where", $s_que); //fix by alik
$keyword = str_replace("tmp_key_tmp","where", $keyword); //fix by alik


원리를 설명해드리면 일단 where 가 들어간 키워드에서 where 를 tmp_key_tmp 로 변환합니다.. (설마 저런값으로 검색할일은 없겟죠?)
그리고 sql 의 검색구문의 where 에 필요하다면 디비젼을 추가하고나서 다시 tmp_key_tmp 를 where로 변환하고 키워드값도 우너래데로 돌려놓습니다.
간단하죠.. ^^


4. 드디어 마지막4번 ! 아주아주 뿌듯한 버그때려잡기 한판의 결정판!
글내용에서 검색어를 하이라이트해줄때 html 태그안에있는 단어까지 하이라이트를 매겨버리는 무서운 버그입니다.
예를 들어 검색어가 'http' 였다묜 글내용에 http는 잘 하이라이트 되겠지만.. 문제는 태그내부에 있는 http들 그러니까.. img src=http:// 부분이나.. 링크의 http 등등 무수히 많은 부분의 http가 <span 으로 둘려싸여서 이미지도 엑박뜨고 링크도 깨지고 여러가지 문제가 발생하죠...

<img src=<span~~~~http://  이렇게 된다는거죠... 프흣~

http 는 좀 극적인 예제였지만.. 단순히 말해서 검색어와 그림화일이나 링크주소등과 일치할때 생길수 있는 상황입니다.

몇몇분들이 임시방편으로 그림태그일때나..링크일때는 처리하지 않게 하는등의 방법을 내놓으셨지만... 그보다도.. 정규식을 조금더 활용하여 일차히는 키워드가 태그에 내부에 존재하는지 외부에 존재하는지 검사후 하이라이트로 처리하도록 했습니다.


include 폴더의 list_check.php 에서 아래내용을 찾으세요...


// 검색어가 있을경우 내용의 키워드를 변경
if($sc=="on" && $keyword) {
        $keyword_pattern = "/".str_replace(" ","\0",preg_quote($keyword,"/"))."/i";
                $memo = preg_replace($keyword_pattern, "<span style='color:#FF001E;background-color:#FFF000;'>$keyword</span>", $memo);
                      }

// 이미지 리사이즈를 위해서 처리하는 부분



찾으신 부분을 아래처럼 바꿔주시면 해결됩니다.



// 검색어가 있을경우 내용의 키워드를 변경
if($sc=="on" && $keyword) {
    $memo = preg_replace("/($keyword)(?=[^>]*<)/i", "<span style='color:#FF001E;background-color:#FFF000;'>$0</span>", $memo);
}

// 이미지 리사이즈를 위해서 처리하는 부분




이상입니다....

p.s:

1. 테스트하느라고 여기저기 다녀봤는데요... 이 버그때문에 아예 하이라이트기능을 않쓰시는분들... where 나 특수기호는 아예 검색이 되지않게 하신분들... 등등 여러가지 상황을 접하게 되었습니다... 이제 맘편히 사용하세요..검색기능 + 결과가 눈에 팍팍 들어오는 하이라이트 기능...

2. 음... 그리고... 추천 많이 눌러주세요... 리플도 많이 달아주세요... 솔직히 엔죠에 팁 올리는거.. 리플과 추천맛에올리는건데요.. 허접한팁이더라도.. 되는사람도 있고 않되는 사람도 있더라도.. 같이 배워나가는 입장에서 서로 응원해주죠 우리,  저조한 추천수에.. 엔지오도 옛날같지 않구나..느껴지구요.. 버그잡고 기뻤지만..올릴까 말까 고민했었답니다.

3. 고수님들 홈피에 주욱..돌아봤는데.. 모두 패치하셔야겠던데요..~ ^^ ~ (여기도 포함!)
profile 글쓴이 빽짱구

단점이 없는 사람은 장점도 거의 없다 - 에이브러햄 링컨

엮인글 :
https://web.webmini.net/zb4/17435/3fc/trackback
소중한 댓글 부탁드립니다.
추천수 10단위당 메달이 1개씩 노출되고, 추천수에 따라 배경색이 변하며, 일정수의 추천수를 받을시 BEST 아이콘이 붙게됩니다.
추천수에 따른 배경색 보기 본문으로 바로가기
  • 추천수 50개이상
  • 추천수 30개이상
  • 추천수 20개이상
  • 추천수 10개이상
  • 추천수 3개이상
닫기

댓글 '1'

profile
title: [ani]깜빡이는 표정빽짱구 (17436)

2005.11.11 19:36:03

작성자
List of Articles
번호 제목 글쓴이 날짜 추천 수sort 조회 수
78 방명록 최근게시물 추출하기 [2] title: [ani]깜빡이는 표정빽짱구 2004-05-26 13 3253
77 쪽지보낼때 경고메세지 띄우기 title: [ani]깜빡이는 표정빽짱구 2004-05-29 13 2233
76 게시물 읽은 사람들 리스트 보여주기 [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 13 3292
75 제로보드, 쪽지오면 자동쪽지함 띄우기 title: [ani]깜빡이는 표정빽짱구 2004-03-07 14 5089
74 로그인이나 최근게시물 맨위에 5줄 다른팁 title: [ani]깜빡이는 표정빽짱구 2004-04-20 14 2287
73 유료회원만 글 볼수있게 하자. title: [ani]깜빡이는 표정빽짱구 2004-05-05 14 2355
72 서브 레이어에서 홈페이지 링크에 %2f 가 붙는 문제 title: [ani]깜빡이는 표정빽짱구 2004-05-28 14 2404
71 게시판 생성시 오류메세지 title: [ani]깜빡이는 표정빽짱구 2004-07-08 14 3936
70 로그인 풀림과 로그아웃 잘안되는 문제 title: [ani]깜빡이는 표정빽짱구 2005-12-04 14 5011
69 가입약관 넣기 다른방법 (가입약관 먼저 보여주기) [1] title: [ani]깜빡이는 표정빽짱구 2004-02-23 15 2632
68 개인정보수정시 이미지 네임 추가하기 title: [ani]깜빡이는 표정빽짱구 2004-02-23 15 2606
67 자료 다운받을시 그자료 올린사람에게 포인트 주기 title: [ani]깜빡이는 표정빽짱구 2004-04-20 15 2275
66 코멘트 달린글 삭제 못하게 하기 title: [ani]깜빡이는 표정빽짱구 2004-07-12 15 2793
65 오늘 올라온 게시물 갯수 등... title: [ani]깜빡이는 표정빽짱구 2004-10-24 15 2210
64 실시간 쪽지함띄우기 title: [ani]깜빡이는 표정빽짱구 2005-03-09 15 3273
63 게시판타이틀메뉴 자동 생성 + 카테고리--->이미지로 바꿀수 있음. title: [ani]깜빡이는 표정빽짱구 2006-06-22 15 7087
62 가입약관 넣기 [2] title: [ani]깜빡이는 표정빽짱구 2004-02-23 16 2294
61 최근게시물 추출시 비밀글 보이게 하기 , 답글 안보이게 하기 title: [ani]깜빡이는 표정빽짱구 2004-04-10 16 3443
60 최근게시물에 new아이콘 달기 title: [ani]깜빡이는 표정빽짱구 2004-04-12 16 2661
59 [외부로그인] 안에 레벨아이콘 넣기 [1] title: [ani]깜빡이는 표정빽짱구 2004-07-12 16 3495