WP-ShortStat에 한글 검색 엔진 등록 및 인코딩 변환

April 14th, 2006 by 바람

많은 워드프레스 블로거들이 WP-ShortStat 플러그인을 사용하지만 이 플러그인의 Search Strings에 등록되는 검색 엔진에 우리나라 검색엔진들은 포함이 되지 않아 정확한 통계가 나오지 않는다. 게다가 인코딩에 상관없이 등록되어 EUC-KR로 된 검색어를 볼 때는 페이지의 인코딩을 바꿔서 보아야 하는 불편함이 있다. 그래서 wp-shortstat 1.3 wind patch를 만들었으나 오류가 있어서 포스트를 닫았다. 오류를 수정한 후 1.4 버전이 나오면 다시 포스트를 열려고 했으나 이제 wp-shortstat를 그만 사용하기로 마음 먹어 최종 공개한다. 082net을 통해 알게된 wp-slimstat을 사용할 계획이며 wp-shortstat wind patch는 앞으로 1.4 버전이 나오더라도 업데이트 할 계획은 없다. 이 버전은 mbstring iconv에서 모두 잘 작동하며 충분한 테스트를 거쳤다.

사용방법

기존 플러그인 위에 덮어 씌운다
단, 인코딩 변환은 mbstring 이나 iconv 모듈이 필요하다
UTF-8로 인코딩된 워드프레스를 기준으로 작성되었다

효능효과

우리나라 검색 엔진에서 검색해서 들어온 것도 Search Strings에 등록되고 EUC-KR일 경우에는 UTF-8로 변환되어 입력된다

다운로드

WP-ShortStat 1.3 wind patch2 : 다운

등록 검색 엔진

네이버, 다음, 엠파스, 네이트, 파란, 첫눈

라이센스

WP-ShortStat에 라이센스가 따로 적혀있지 않으므로 Wordpress Codex

You may also wish to add a GPL template, to explicitly mention that the plugin is released under the same licence as WordPress.

라는 문장을 따라 GPL로 간주하고 결과적으로 이 플러그인 패치도 GPL이다
즉 수정 및 재배포 뿐 아니라 구워 먹고 삶아 먹는것 모두 가능하다

적용내용

플러그인 파일 내에서 yahoo로 검색을 하면 다음 코드가 나온다

else if (preg_match("/yahoo\./i", $url['host'])) {
parse_str($url['query'],$q);
// Yahoo search terms are in “p”
$searchterms = $q['p'];
}

이를 응용해서 else if 문의 제일 아래에 추가하는데 네이버를 예로 들면 아래와 같다

else if (preg_match("/search\.naver\./i”, $url['host'])) {
parse_str($url['query'],$q);
// Naver search terms are in “query”
$searchterms = $q['query'];
}

바꾸는 곳은 두곳이다

위의 주소는 검색엔진의 주소이다
점을 찍을 경우 \.으로 하는 것만 주의 하고 보다시피 뒤의 .com같은 건 안적는게 낫다

아래의 query는 검색한 후에 주소를 보면 알수 있다.
내가 찾는것이 wordpress라면 주소창에 나온 주소는 아래와 같다
search.naver.com/search.naver?where=nexearch&query=wordpress
&x=0&y=0&hw=1
여기서 보면 query= 다음에 내가 찾는 검색어가 나오는데 다음의 경우에는 q=으로 시작한다
아무튼 이걸 적어주면 된다

그리고 그 아래에

if (isset($searchterms) && !empty($searchterms)) {

이 나오는데 바로 밑에 인코딩 변환 코드를 삽입한다

if ( function_exists('mb_convert_encoding') ) {
$searchterms = mb_convert_encoding($searchterms, 'UTF-8', 'ASCII, UTF-8, EUC-KR');
}
else if ( function_exists('iconv') ) {
if ( !preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs’, $searchterms) )
$searchterms = iconv(’EUC-KR’, ‘UTF-8′, $searchterms);
}

2006년 1월 20일에 공개했던 내용을 수정.

Leave a Reply