류광님의 글 “구글 친화적인 검색어 하이라이트 구현 아이디어”를 보고 제 홈에 적용해 봤습니다.
간단히 말하면.. 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 에 트랙백되었습니다.