류광님의 글 “구글 친화적인 검색어 하이라이트 구현 아이디어”를 보고 제 홈에 적용해 봤습니다.
간단히 말하면.. 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 에 트랙백되었습니다.
아마도 올블로그는 리퍼러를 넘겨주는게 아니라
page redirect 해서 그런거 같아요 ^-^;;
posturl.aspx?뒤에 URL 머시기 인자로 넘기니까요 🙂
네.. 접속경로 보니까 그렇게 나와서 그냥 두었답니다. 🙂
시간날때 조그에도 적용을 해봐야겠네요. ^^ 그 때는 소스좀 갔다 쓸께요.
부족한 부분을 채워주시리라 믿습니다 !
안녕하세요.
저는 UTF-8 홈페이지인데, 야후 검색창을 넣었더니 한글이 깨져 야후에서 받아들이지 않습니다. 때가 어느 때인 줄도 모르고 EUC-KR을 고집하는 야후가 얄밉기는 하지만 구글처럼 UTF-8을 그대로 사용하거나 야후에 EUC-KR 로 인코딩하여 넘겨주는 방법이 없을까요?
accept-charset=”EUC-KR” 를 첨가해도 안되더군요.
제 소스는 아래와 같습니다.
echo “”;
echo “”;
echo “”;
안녕하세요.
저는 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”>
?form method=”GET” action=”http://kr.engdic.yahoo.com/result.html” target=”_blank”>
안녕하세요.
저는 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?
답변이 늦었습니다만.. 제가 웹개발자가 아닌지라.. 전송시 문자셋변환은 잘 모르겠네요 -_-;;