下記のスクリプト(class or function)を書いてください。
質問が長くなりましたので、 http://d.hatena.ne.jp/esecua/20100314 を御覧下さい。
PHP始めたばかりで自身がありませんが、やってみました。
また、サンプルとしてのGoogle検索URLのキーワードは"は hatena は"です。
print_r(searchword("はてな,hatena,ハテナ"));
function searchword($keyword){
//googleのURLからqの要素を取り出し、デコードします。($googlekeywords)
$ref = "http://www.google.co.jp/search?num=50&hl=ja&safe=off&rlz=1T4ADBS...";
$googlekeywords = $match[preg_match("/q=(.*?)&/",$ref,$match)];
$googlekeywords = urldecode($googlekeywords);
//そして半角スペース区切りで配列を作ります。($searchedKeyWord)
$searchedKeyWord = explode(" ", $googlekeywords);
//キーワードは半角コンマ区切りで配列を作ります。($keywords)
$keywords = explode(",", $keyword);
for($i=0;count($keywords)>$i;$i++){
for($j=0;count($searchedKeyWord)>$j;$j++){
//用意したキーワードが検索されたキーワードに含まれているとtureを返します。
if(preg_match("/$keywords[$i]/",$searchedKeyWord[$j])){
return ture;
}
}
}
return false;
}
キーワードのマッチのところですが、"含む"ではなく完全一致を求めるのであれば
if(keywords[$i] == $searchedKeyWord[$j])
return ture;
としてください。
<?php function strpull($target, $from, $to) { // strposで検索する文字列が無いと処理が面倒になるので$targetの後ろに付加して(番兵)常に見つかるようにしている。 $target = substr($target, strpos($target.$from,$from)+strlen($from)); return substr($target, 0, strpos($target.$to, $to)); } function searchword($keyword, $q='q') { $searchedKeyWord = urldecode(strpull($_SERVER["HTTP_REFERER"],$q.'=', '&')); echo "target=$searchedKeyWord\n"; echo "keyword=$keyword\n"; $keywords = explode(',', $keyword); foreach ($keywords as $word) if (stripos($searchedKeyWord, $word) !== FALSE) // strposなら大文字小文字を区別します return TRUE; return FALSE; } var_dump(searchword("はてな,Hatena,ハテナ")); ?>
strpullは$targetの文字列の中から$fromから$toで囲まれる部分の文字列を返します。
この場合は$targetは$_SERVER["HTTP_REFERER"]で$from、$toは"q=","&"になります。
$keywordはカンマで区切られているのでexplodeで配列にします。
$searchedKeyWordは配列に展開せずに文字列として、その中に$keywordの単語があるか毎回検索する方法です。
単純に文字列のまま処理することで+ や「%E3%80%80」などや検索オプションへの対応をしなくてすますためです。
good job