[제로] 검색 버그 고치기

페이지 정보

루루아빠 2,306 2005.07.08 11:55

평점

  • 평점 : 0점 (0명 참여)

본문

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","\\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. 드디어 마지막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","\\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);
 }

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

추천인
  • 추천해 주세요
6
루루아빠 - 회원등급 : 최고관리자 - 포인트 : 1,290,342
레벨 96
경험치 1,388,035

Progress Bar 70%

- 가입일 : 2015-03-04 03:24:54
- 서명 : KNOW YOUR LIMITS BUT NEVER STOP TRYING TO EXCEED THEM !!
- 자기소개 : 루루의 자랑 루루아빠랍니다~~

댓글

첫 번째 댓글을 남겨 주세요

Total 7463538 페이지
제목 글쓴이 날짜 조회 추천
그누•영카트  영카트 5.4.4.2 shadow2fox 2021.01.05 872 0
그누•영카트  그누보드(영카트) 5.4.8 shadow2fox 2021.06.18 850 0
그누•영카트  댓글+2 그누보드(영카트) 5.5.6 이니시스 통합인증(간편인증) 사용시 필수 패치 shadow2fox 2022.04.20 830 3
그누•영카트  댓글+2 그누보드(영카트) 5.5.8.2 shadow2fox 2022.07.27 813 2
그누•영카트  댓글+2 그누보드(영카트) 5.5.7.4 shadow2fox 2022.05.25 762 2
그누•영카트  댓글+2 그누보드(영카트) 5.5.7.1 (★ 5.5.7 버전 사용자님들께서는 필독해 주세요) shadow2fox 2022.04.30 757 3
그누•영카트  댓글+2 그누보드(영카트) 5.5.2 shadow2fox 2022.02.23 715 2
그누•영카트  댓글+1 그누보드(영카트) 5.4.20 shadow2fox 2021.12.23 650 1
그누•영카트  댓글+1 그누보드(영카트) 5.4.22 shadow2fox 2022.01.18 624 1
그누•영카트  댓글+3 다음 카카오 서비스 먹통 사태로 인한 그누•영카트 postcode.v2.js 리소스 로딩 에러 shadow2fox 2022.10.16 623 3
그누•영카트  댓글+1 그누보드(영카트) 5.4.21 shadow2fox 2022.01.11 587 2
그누•영카트  댓글+1 그누보드(영카트) 5.5.3 (구글 쇼핑 피드 추가) shadow2fox 2022.03.05 582 1
에디터  댓글+2 CKEditor 4.x 버전 체크로 인한 콘솔 에러 해결하기 shadow2fox 2023.12.24 580 3
이윰  댓글+2 Prism.js 플러그인 사용 시 HTML 주석 처리가 삭제되는 문제 해결하기 shadow2fox 2022.04.24 555 2
그누•영카트  댓글+2 그누보드(영카트) 5.5.8.1.2 shadow2fox 2022.07.01 536 2
그누•영카트  댓글+2 그누보드(영카트) 5.5.7.3 shadow2fox 2022.05.24 489 2
그누•영카트  댓글+1 그누보드(영카트) 5.5.4 shadow2fox 2022.03.22 485 1
그누•영카트  댓글+1 그누보드(영카트) 5.5.7 shadow2fox 2022.04.26 480 1
이윰  댓글+2 비메오 썸네일 추출 올바르게 적용하기 shadow2fox 2023.04.24 471 2
그누•영카트  댓글+1 그누보드(영카트) 5.5.7.2 (★ 5.5.7.1 버전 사용자님은 필독해 주세요) shadow2fox 2022.05.04 461 2