제로보드 관련된 유용한 정보를 공유하는 곳입니다.
  • 웹미니 한줄 전광판 영역 입니다.
글 수 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/655/trackback
소중한 댓글 부탁드립니다.
추천수 10단위당 메달이 1개씩 노출되고, 추천수에 따라 배경색이 변하며, 일정수의 추천수를 받을시 BEST 아이콘이 붙게됩니다.
추천수에 따른 배경색 보기 본문으로 바로가기
  • 추천수 50개이상
  • 추천수 30개이상
  • 추천수 20개이상
  • 추천수 10개이상
  • 추천수 3개이상
닫기

댓글 '1'

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

2005.11.11 19:36:03

작성자
List of Articles
번호 제목 글쓴이 날짜 추천 수 조회 수
78 게시판별로 권한 출력하기 title: [ani]깜빡이는 표정빽짱구 2005-11-20 4 2608
77 글읽기 권한 없을때 제목 클릭하면 경고창 띄우기 title: [ani]깜빡이는 표정빽짱구 2005-11-17 4 2584
76 제로보드에 글쓴이 국가 아이콘 달기 file title: [ani]깜빡이는 표정빽짱구 2005-11-17 10 4458
75 각종 검색버그 다 잡았습니다. [1] title: [ani]깜빡이는 표정빽짱구 2005-11-11 16 3233
74 제로보드 비밀글관련 보안패치 4.1 pl7 title: [ani]깜빡이는 표정빽짱구 2005-04-06 17 5435
73 best of best 로그인창에 아이디 비밀번호란 이미지넣기 title: [ani]깜빡이는 표정빽짱구 2005-04-05 28 3766
72 다운로드시 포인트 차감 + 강제 다운로드 창 뜨기. title: [ani]깜빡이는 표정빽짱구 2005-04-04 16 3891
71 업로드시 그림 파일명이 한글일경우 이름 자동 변경하기 [1] title: [ani]깜빡이는 표정빽짱구 2005-03-16 11 3742
70 자동로그인 풀림현상 100%해결법 [2] title: [ani]깜빡이는 표정빽짱구 2005-03-16 12 4552
69 일반문서에 레벨별 권한을 주는 방법 title: [ani]깜빡이는 표정빽짱구 2005-03-13 11 3012
68 실시간 쪽지함띄우기 title: [ani]깜빡이는 표정빽짱구 2005-03-09 15 3273
67 방문객이 레이어 메뉴의 회원정보 보기를 금지시키자!!! title: [ani]깜빡이는 표정빽짱구 2005-01-20 18 3335
66 best of best "where" 검색시 오류 뜨는것 해결 [1] title: [ani]깜빡이는 표정빽짱구 2005-01-02 22 2761
65 회원 탈퇴할 때 비밀번호와 주민등록번호 확인후 탈퇴시키기 title: [ani]깜빡이는 표정빽짱구 2005-01-02 16 5120
64 새로운 코멘트 달리면 코멘트숫자 색갈바꿔주기 [1] 맑은숲 2004-10-28 18 2493
63 best of best 일정조회수 되면 Cool 마크 달기. [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 21 2858
62 best of best 생일자 로그인시 축하메세지 및 축하곡 띄우기 title: [ani]깜빡이는 표정빽짱구 2004-10-24 32 3589
61 쪽지에 파일을 첨부하자!!! [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 19 5259
60 제로보드 게시판아이디 바꾸기.. file [3] title: [ani]깜빡이는 표정빽짱구 2004-10-24 18 2649
59 게시물 읽은 사람들 리스트 보여주기 [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 13 3292