[PHP]Googleからの検索ワードをハイライトする

Googleからのキーワード検索して訪問したユーザに対し、記事をハイライトして表示する方法。

当初はparse_urlを利用したコードを書こうと思っていたのだが、Web Artisan Blogさんのページにあるように、想定外のエラーが起こる模様。

そこで、$HTMLに検索対象文字列が入ってる場合、以下のように記述。

< ?php
$host = $_SERVER['HTTP_REFERER'];
$host_p = parse_url($host);
if(stristr($host_p['host'], "google")){ //Googleからの訪問のみ実行
if(stristr($host, "q=")){ //qを取り出す
$word = preg_replace("/(.*)q=(.*)/", "$2", $host);
$word = explode("&", $word);
}
$search_text = $word[0];
}
if($search_text){
$str_text = urldecode($search_text);
$str_text = mb_ereg_replace(" ", " ", $str_text);
$str_text = explode(" ", $str_text);
$str_count = count($str_text);
for($i=0; $i<$str_count; $i++){ $HTML = str_replace($str_text[$i], "<span class="yellow">{$str_text[$i]}</span>", $HTML); } } ?>

parse_urlはホスト元の判断時のみに利用してます。stristrでgoogleの文字が入っている場合に処理を実行します。

次にq=以下を取り出しています。explodeでqから&までを配列として格納しています。

次に、キーワードをデコード後、全角スペースがある場合は半角に修正し、
半角スペースでexplodeしています。
これで、キーワードが分かれたはずです。

あとは$HTMLに検索文字列のみspan class="yellow"で囲む処理をしています。
最後に、スタイルシートで


.yellow{background-color:yellow;}

と指定すれば完了です。