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

댓글 '1'

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

2005.11.11 19:36:03

작성자
List of Articles
번호 제목 글쓴이 날짜 추천 수sort 조회 수
98 글읽기 권한 없을때 제목 클릭하면 경고창 띄우기 title: [ani]깜빡이는 표정빽짱구 2005-11-17 4 2584
97 게시판별로 권한 출력하기 title: [ani]깜빡이는 표정빽짱구 2005-11-20 4 2608
96 쪽지 확인과 보내기 title: [ani]깜빡이는 표정빽짱구 2004-04-29 9 2783
95 가입되면 관리자에게 쪽지오게하기 title: [ani]깜빡이는 표정빽짱구 2004-02-11 10 2287
94 제로보드에 글쓴이 국가 아이콘 달기 file title: [ani]깜빡이는 표정빽짱구 2005-11-17 10 4458
93 최근게시물에서 제목 클릭시에 팝업으로 내용 띄우기 title: [ani]깜빡이는 표정빽짱구 2006-10-20 10 4951
92 최근게시물에서 공지사항이 젤위에 표시하게 할려면... [3] title: [ani]깜빡이는 표정빽짱구 2004-02-11 10 5053
91 일반문서에 레벨별 권한을 주는 방법 title: [ani]깜빡이는 표정빽짱구 2005-03-13 11 3013
90 업로드시 그림 파일명이 한글일경우 이름 자동 변경하기 [1] title: [ani]깜빡이는 표정빽짱구 2005-03-16 11 3742
89 메뉴에 새글이나 새로운 코멘트까지 표시하기 title: [ani]깜빡이는 표정빽짱구 2006-06-22 11 3728
88 원하는 레벨이하만 페이지 보기 하기와 로그인후 페이지 이동하기 title: [ani]깜빡이는 표정빽짱구 2006-09-28 11 4160
87 가입한날 탈퇴못하게 막기 title: [ani]깜빡이는 표정빽짱구 2004-04-10 12 2567
86 코맨트 겟수[1] 이부분을 바꿔보자 [1] title: [ani]깜빡이는 표정빽짱구 2004-04-10 12 2414
85 자동로그인 풀림현상 100%해결법 [2] title: [ani]깜빡이는 표정빽짱구 2005-03-16 12 4552
84 일정시간 페이지사용이 없을시 로그아웃버튼 먹통일때 title: [ani]깜빡이는 표정빽짱구 2006-10-23 12 5762
83 가입아이디에 특수문자 포함금지 title: [ani]깜빡이는 표정빽짱구 2004-02-11 13 4286
82 자동으로-말머리(카테고리) 붙이기 title: [ani]깜빡이는 표정빽짱구 2004-04-10 13 4153
81 제로보드안 img 파일 설명 [1] title: [ani]깜빡이는 표정빽짱구 2004-04-10 13 2694
80 코맨트에 링크주소시 target=_blank> 해결하기 title: [ani]깜빡이는 표정빽짱구 2004-04-11 13 3113
79 게시물 읽은회원 리스트 출력하기 title: [ani]깜빡이는 표정빽짱구 2004-04-12 13 3428