PHP


下記のスクリプト(class or function)を書いてください。

質問が長くなりましたので、 http://d.hatena.ne.jp/esecua/20100314 を御覧下さい。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/03/21 10:36:42
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:Soraneko No.1

回答回数5ベストアンサー獲得回数0

すみません。

書き忘れていましたが、このコードはUTF-8の環境で動作確認しています。

id:Soraneko No.2

回答回数5ベストアンサー獲得回数0

ポイント18pt

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;


としてください。

id:tobeoscontinue No.3

回答回数220ベストアンサー獲得回数59

ポイント62pt
<?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」などや検索オプションへの対応をしなくてすますためです。

id:esecua

good job

2010/03/16 08:23:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません