"http://www.google.com/search?aq=f&hl=en&lr=&as_qdr=all&q=A+B+C&btnG=Search", "engine-name"=>"Google", "utf8-terms"=>urlencode("A B C") ), array ( // Google adanced search query : Advanced search AND "referrer"=>"http://www.google.com/search?hl=en&as_q=A+B+C&as_epq=&as_oq=&as_eq=&num=10&lr=&as_filetype=&ft=i&as_sitesearch=&as_qdr=all&as_rights=&as_occt=any&cr=&as_nlo=&as_nhi=&safe=images", "engine-name"=>"Google", "utf8-terms"=>urlencode("A B C") ), array ( // Google advanced search query : EXACT quoted match "referrer"=>"http://www.google.com/search?hl=en&as_q=&as_epq=A+B+C&as_oq=&as_eq=&num=10&lr=&as_filetype=&ft=i&as_sitesearch=&as_qdr=all&as_rights=&as_occt=any&cr=&as_nlo=&as_nhi=&safe=images", "engine-name"=>"Google", "utf8-terms"=>urlencode('"A B C"') ), array ( // Google advanced search query : OR "referrer"=>"http://www.google.com/search?hl=en&as_q=&as_epq=&as_oq=%22A+B+C%22+%22D+E+F%22&as_eq=&num=10&lr=&as_filetype=&ft=i&as_sitesearch=&as_qdr=all&as_rights=&as_occt=any&cr=&as_nlo=&as_nhi=&safe=images", "engine-name"=>"Google", "utf8-terms"=>urlencode('"A B C" "D E F"') // should have been '"A B C" OR "D E F"' , but it's too hard to implement and no one cares. ), array ( // Google advanced search query : Except (not) "referrer"=>"http://www.google.com/search?hl=en&as_q=&as_epq=&as_oq=&as_eq=A&num=10&lr=&as_filetype=&ft=i&as_sitesearch=&as_qdr=all&as_rights=&as_occt=any&cr=&as_nlo=&as_nhi=&safe=images", "engine-name"=>"Google", "utf8-terms"=>urlencode('-A') ), array ( // Google advanced search query : Except (not), two words "referrer"=>"http://www.google.com/search?hl=en&as_q=&as_epq=&as_oq=&as_eq=A+B&num=10&lr=&as_filetype=&ft=i&as_sitesearch=&as_qdr=all&as_rights=&as_occt=any&cr=&as_nlo=&as_nhi=&safe=images", "engine-name"=>"Google", "utf8-terms"=>urlencode('-A -B') ), array ( "referrer"=>"http://go.mail.ru/search?lfilter=y&mailru=1&q=%CC%E8%EB%E0%ED%E0+%C1%E0%EB%E0%E5%E2%E0", "engine-name"=>"Mail.ru", "utf8-terms"=>"%D0%9C%D0%B8%D0%BB%D0%B0%D0%BD%D0%B0+%D0%91%D0%B0%D0%BB%D0%B0%D0%B5%D0%B2%D0%B0" ), array ( // Yandex, already in UTF 8 "referrer"=>"http://www.yandex.ru/yandsearch?p=41&text=%D1%82%D0%B8%D0%BC%D1%83%D1%80%20%D0%BC%D1%83%D1%86%D1%83%D1%80%D0%B0%D0%B5%D0%B2", "engine-name"=>"Yandex", "utf8-terms"=>"%D1%82%D0%B8%D0%BC%D1%83%D1%80+%D0%BC%D1%83%D1%86%D1%83%D1%80%D0%B0%D0%B5%D0%B2" ), array ( // Google.ru, with encoding hint. "referrer"=>"http://www.google.ru/cse?cx=partner-pub-1778580303458167%3Ajrai3kxx4v5&ie=windows-1251&q=%CE%F1%E5%F2%E8%ED%EE-%E8%ED%E3%F3%F8%F1%EA%E8%E9+%EA%EE%ED%F4%EB%E8%EA%F2+1992%E3&sa=%CF%EE%E8%F1%EA", "engine-name"=>"Google", "utf8-terms"=>"%D0%9E%D1%81%D0%B5%D1%82%D0%B8%D0%BD%D0%BE-%D0%B8%D0%BD%D0%B3%D1%83%D1%88%D1%81%D0%BA%D0%B8%D0%B9+%D0%BA%D0%BE%D0%BD%D1%84%D0%BB%D0%B8%D0%BA%D1%82+1992%D0%B3" ), array ( // Yandex, already in UTF 8, end case with lower bound of UTF8 check. "referrer"=>"http://yandex.ru/yandsearch?text=%D1%80%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE-%D1%87%D0%B5%D1%87%D0%B5%D0%BD%D1%81%D0%BA%D0%B8%D0%B9+%D0%BA%D0%BE%D0%BD%D1%84%D0%BB%D0%B8%D0%BA%D1%82&stpar2=%2Fh1%2Ftm27%2Fs2&stpar1=%2Fu1&stpar3=%2Fm2%2Ftc13%2Fnc1", "engine-name"=>"Yandex", "utf8-terms"=>"%D1%80%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE-%D1%87%D0%B5%D1%87%D0%B5%D0%BD%D1%81%D0%BA%D0%B8%D0%B9+%D0%BA%D0%BE%D0%BD%D1%84%D0%BB%D0%B8%D0%BA%D1%82" ), array ( // Google Ukraine encodes in cp1251 "referrer"=>"http://www.google.com.ua/search?q=%EA%F2%EE-%F2%EE+%EE%F2%EF%F0%E0%E2%EB%FF%E5%F2+%F1+%EC%EE%E5%E3%EE+%F3%E8%ED%E0", "engine-name"=>"Google", "utf8-terms"=>"%D0%BA%D1%82%D0%BE-%D1%82%D0%BE+%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82+%D1%81+%D0%BC%D0%BE%D0%B5%D0%B3%D0%BE+%D1%83%D0%B8%D0%BD%D0%B0" ), array ( // Google Ukraine, in utf8 "referrer"=>"http://www.google.com.ua/search?q=%D0%BA%D1%82%D0%BE-%D1%82%D0%BE+%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82+%D1%81+%D0%BC%D0%BE%D0%B5%D0%B3%D0%BE+%D1%83%D0%B8%D0%BD%D0%B0", "engine-name"=>"Google", "utf8-terms"=>"%D0%BA%D1%82%D0%BE-%D1%82%D0%BE+%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82+%D1%81+%D0%BC%D0%BE%D0%B5%D0%B3%D0%BE+%D1%83%D0%B8%D0%BD%D0%B0" ), array ( // Google Russia, in cp1251 "referrer"=>"http://www.google.ru/search?hl=ru&q=%E2%EE%E9%ED%E0+%D0%EE%F1%F1%E8%E8+%F1+%D7%E5%F7%ED%E5%E9&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=", "engine-name"=>"Google", "utf8-terms"=>"%D0%B2%D0%BE%D0%B9%D0%BD%D0%B0+%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8+%D1%81+%D0%A7%D0%B5%D1%87%D0%BD%D0%B5%D0%B9" ), ); foreach($test as $t) { $res = fs_process_search_engine_referrer($t['referrer'], $engine, $terms); $this->assertTrue($res, "failed test : ". var_export($t, true)); $this->assertEquals($t['engine-name'],$engine->name, "Unexpected search engine name \"$engine->name\"\n". var_export($t, true)); $this->assertEquals($t['utf8-terms'],urlencode($terms), "\nActual : ".urlencode($terms)."\nExpected : ".($t['utf8-terms'])."\n\n". var_export($t, true)); } } } ?>