각종 검색버그 다 잡았습니다. > Web Development

본문 바로가기
  • kb@lovelet.com
사이트 내 전체검색

RESOURCES Web Development

각종 검색버그 다 잡았습니다.

페이지 정보

본문

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

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

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

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


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

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

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


원본:

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

$keyword_pattern = "/$keyword/i";

if($sn=="on") $data[name] = preg_replace($keyword_pattern, "$keyword", $data[name]);

if($ss=="on") $data[subject] = preg_replace($keyword_pattern, "$keyword", $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="$temp_name";


$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="".$subject."";
}


수정후:

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

$temp_name = get_private_icon($data[ismember], "2");
if($temp_name) $name="$temp_name";


$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","\\\\0",preg_quote($keyword,"/"))."/i";
if($sn=="on") $name = preg_replace($keyword_pattern, "$keyword", $name);
if($ss=="on") $subject = preg_replace($keyword_pattern, "$keyword", $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="".$subject."";
}


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

include 폴더의 list_check.php 에서 으로 되있어야 합니다.. (태그를 열기만하고 않닫아서 생긴오류죠..)


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~~~~<Ahttp:// 이렇게 된다는거죠... 프흣~

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

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


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


// 검색어가 있을경우 내용의 키워드를 변경
if($sc=="on" && $keyword) {
$keyword_pattern = "/".str_replace("\\0","\\\\0",preg_quote($keyword,"/"))."/i";
$memo = preg_replace($keyword_pattern, "$keyword", $memo);
}

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



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



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

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




이상입니다....

p.s:

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

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

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

Share Post:

댓글목록

등록된 댓글이 없습니다.

Sign In
OR
Don't have an account? SIGN UP

Keywords

Visits

접속자

Total Visits
1,894,877