구글 친화적인 검색어 하이라이트 구현

구글검색결과 Highlighting

류광님의 글 “구글 친화적인 검색어 하이라이트 구현 아이디어”를 보고 제 홈에 적용해 봤습니다.

간단히 말하면.. Google, Daum, Naver, Empas, Yahoo, BlogKorea등의 검색엔진을 통해서 들어오시는 분들의 Referer 주소를 조사하여,
검색엔진에 입력했던 해당 단어를 제 홈에서도 하이라이팅(Highlighting) 해주는 기능입니다.

일례로 구글에서 “Firefox Extension” 을 검색해보면 가장 처음에 제 글이 보이는데요.
( 구글이 아마도 절 좋아하나 봅니다. 이런 주제어인데 1등이로군요 ^_^; )
거기서 제 페이지를 클릭해서 함 들어가 보시면, 구글에서 검색했던 단어인 Firefox 와 Extension 이란 글자들이
제 홈에도 서로 다른 색깔로 표시되는것을 보실수 있습니다. (위에 화면이 그 결과입니다.)

검색엔진을 통해 들어오셨을경우, 해당 글자때문에 오신것일테니.. 찾아서 보여주는건 하나의 서비스 일수 있겠죠. 🙂

혹시 필요하신분들을 위해 소스를 공개합니다. 소스코드는 간단하니까, 쉽게 적용하실수 있을겁니다.
전 태그안에 글자들은 치환안되게 막느라.. 무지 고생했습니다. T_T (사실은 검색하느라;;)
역시나 PHP 막코딩이니까, 틀린부분 있으면 조언부탁드리겠습니다.

[#!_소스및 적용방법 보기.. ▽|그만 볼래요.. △_!#]


<?

function get_search_text($referer_url)

{    

 
$engines = array (    // 검색엔진의 정보

  
array("google","q",0), // site주소 , 검색문자열스트링 , 인코딩(0=UTF-8,1=urlencode)

  
array("naver","query",1),  

  array(
"empas","q",1),

  array(
"yahoo","p",1),

  array(
"daum","q",1),

  array(
"blogkorea","st",1// 현재 AllBlog는 Referer에 검색정보가 제대로 안넘어와서 제외

 
);

  

  
$output = array();

 
$url_s = parse_url($referer_url); 

 
parse_str($url_s[query], $output);

 

 for (
$i = 0;$i < count($engines);$i++) {

   if(
eregi($engines[$i][0],$url_s[host])) {

     switch (
$engines[$i][2])

     {

       case
0: // UTF-8

         
$tt = mb_convert_encoding($output[$engines[$i][1]], "EUC-KR", "UTF-8");        

         break;

       case
1: // url_decode

         
$tt = rawurldecode($output[$engines[$i][1]]);        

         break;

       default:

         
$tt = mb_convert_encoding($output[$engines[$i][1]], "EUC-KR", "UTF-8");        

         break;

     }         

     

     return
explode(" ",$tt);     

   }     

 } 

 return
0;  

}

function highlight_search_result($memo,$query)

{

  
// 글자들의 색상

  
$colors = array (

  
"#bbbbff","#ffffaa","#bbffff","#ffc000","#ff8080","#30c0ff","#00ffff",

  
"#ff00ff","#f0c0ff","#c0c0c0","#ff8000","#ffc0c0","#ff0000","#008080");

  

  
$cnt_query = count($query) < 13 ? count($query) : 12;

      

  for (
$i = 0;$i < $cnt_query;$i++)

   
$memo = preg_replace(

     
"'(?!<.*?)$query[$i](?![^<>]*?>)'si",

     
"<b style="color:black;background-color:$colors[$i]">$query[$i]</b>", $memo);

   
// 태그안에 있는 문자들은 치환안되게 한다.

  
return $memo;

?>

위 소스를 글출력 부분에 넣고 , 아래와 같이 글전체 변수에 대해 실행해주시면 됩니다.


<?

$referer_query = get_search_text($HTTP_SERVER_VARS[HTTP_REFERER]);

if (is_array($referer_query)) {     

  
$memo = highlight_search_result($memo,$referer_query); // $memo 는 출력할 글 전체 내용

}

?>

[#!_END_!#]

* 이글은 http://occam.n4gate.com/zboard/view.php?id=column&no=55 에 트랙백되었습니다.

  1. 아마도 올블로그는 리퍼러를 넘겨주는게 아니라
    page redirect 해서 그런거 같아요 ^-^;;
    posturl.aspx?뒤에 URL 머시기 인자로 넘기니까요 🙂

  2. 시간날때 조그에도 적용을 해봐야겠네요. ^^ 그 때는 소스좀 갔다 쓸께요.

  3. 안녕하세요.
    저는 UTF-8 홈페이지인데, 야후 검색창을 넣었더니 한글이 깨져 야후에서 받아들이지 않습니다. 때가 어느 때인 줄도 모르고 EUC-KR을 고집하는 야후가 얄밉기는 하지만 구글처럼 UTF-8을 그대로 사용하거나 야후에 EUC-KR 로 인코딩하여 넘겨주는 방법이 없을까요?
    accept-charset=”EUC-KR” 를 첨가해도 안되더군요.
    제 소스는 아래와 같습니다.

    echo “”;
    echo “”;
    echo “”;

  4. 안녕하세요.
    저는 UTF-8 홈페이지인데, 야후 검색창을 넣었더니 한글이 깨져 야후에서 받아들이지 않습니다. 때가 어느 때인 줄도 모르고 EUC-KR을 고집하는 야후가 얄밉기는 하지만 구글처럼 UTF-8을 그대로 사용하거나 야후에 EUC-KR 로 인코딩하여 넘겨주는 방법이 없을까요?
    accept-charset=”EUC-KR” 를 첨가해도 안되더군요.
    제 소스는 아래와 같습니다.

    ?form method=”GET” action=”http://kr.engdic.yahoo.com/result.html” target=”_blank”>

  5. ?form method=”GET” action=”http://kr.engdic.yahoo.com/result.html” target=”_blank”>

  6. 안녕하세요.
    저는 UTF-8 홈페이지인데, 야후 검색창을 넣었더니 한글이 깨져 야후에서 받아들이지 않습니다. 때가 어느 때인 줄도 모르고 EUC-KR을 고집하는 야후가 얄밉기는 하지만 구글처럼 UTF-8을 그대로 사용하거나 야후에 EUC-KR 로 인코딩하여 넘겨주는 방법이 없을까요?
    accept-charset=”EUC-KR” 를 첨가해도 안되더군요.
    제 소스는 아래와 같습니다.
    (거듭 죄송합니다.)
    ?form method=”GET” action=”http://kr.engdic.yahoo.com/result.html” target=”_blank”??input type=”text” name=”p” size=”12″?
    ?input type=”image” src=”themes/$NameOfTheme/images/button.gif” alt=”” size=”18″ align=”absmiddle”?
    ?input type=”hidden” name=”yid” value=”guest” size=”18″??/td??/form?

  7. 답변이 늦었습니다만.. 제가 웹개발자가 아닌지라.. 전송시 문자셋변환은 잘 모르겠네요 -_-;;

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>