这可能是一个愚蠢的问题,但是否有可能捕获用户在 Google 搜索框中输入的内容,然后可以将其用于在我的网站的登录页面上生成动态页面?
例如,假设有人在 Google 上搜索“热狗”,而我的网站作为搜索结果链接之一出现。如果用户单击将他们定向到我的网站的链接,我是否有可能以某种方式从 Google 搜索框中知道或捕获“热狗”文本,以便我可以调用一个脚本来搜索我的本地数据库的内容与热狗有关,然后展示呢?这对我来说似乎完全不可能,但我真的不知道。谢谢。
这可能是一个愚蠢的问题,但是否有可能捕获用户在 Google 搜索框中输入的内容,然后可以将其用于在我的网站的登录页面上生成动态页面?
例如,假设有人在 Google 上搜索“热狗”,而我的网站作为搜索结果链接之一出现。如果用户单击将他们定向到我的网站的链接,我是否有可能以某种方式从 Google 搜索框中知道或捕获“热狗”文本,以便我可以调用一个脚本来搜索我的本地数据库的内容与热狗有关,然后展示呢?这对我来说似乎完全不可能,但我真的不知道。谢谢。
我会这样做
$referringPage = parse_url( $_SERVER['HTTP_REFERER'] );
if ( stristr( $referringPage['host'], 'google.' ) )
{
parse_str( $referringPage['query'], $queryVars );
echo $queryVars['q']; // This is the search term used
}
这是一个古老的问题,自从提出并回答了原始问题以来,答案已经改变。自 2011 年 10 月起,Google 将为登录 Google 帐户的任何人加密此推荐信息:http: //googleblog.blogspot.com/2011/10/making-search-more-secure.html
对于未登录 Google 的用户,搜索关键字仍然可以在推荐 URL 中找到,并且上述答案仍然适用。但是,对于经过身份验证的 Google 用户,网站无法查看他们的搜索关键字。
但是,通过创建专门的登录页面,仍然可以做出明智的猜测。(“赫特人贾巴庄严的木炭素描”页面的访问者可能......嗯,疯了。)
对的,这是可能的。请参阅 HTTP 标头Referer。Referer 标头将包含 Google 搜索结果页面的 URL。
当用户点击 Google 搜索结果页面上的链接时,浏览器将使用以下 HTTP 标头向您的站点发出请求:
Referer: http://www.google.fi/search?hl=en&q=http+header+referer&btnG=Google-search&meta=&aq=f&oq=
只需从请求标头中解析 URL,用户使用的搜索词将在q参数中。上面示例中使用的搜索词是“ http header referer ”。
同一种方法通常也适用于其他搜索引擎,它们只是在 Referer 标头中有不同类型的 URL。
这个答案显示了如何在 PHP 中实现它。
Referer 标头仅在 HTTP 1.1 中可用,但这几乎涵盖了任何现代浏览器。浏览器也可能会伪造Referer header,或者header可能完全丢失,所以不要根据Referer header做出太严重的决定。
这是一个老问题,但我发现谷歌不再给出查询词,因为它默认将每个用户重定向到 https,这不会给你“q”参数。除非有人使用 http ( http://google.com )手动输入 google url然后搜索,否则目前无法获取“q”参数。
是的,它来自网址:
http://www.google.com/search?hl=es&q=hot+dog&lr=&aq=f&oq=
这是一个例子:
谷歌向您的网站发送了许多访问者,如果您想获取他们曾经访问您网站的关键字,可能通过将其显示在页面上来给他们留下深刻印象,或者只是将关键字存储在数据库中,这是我的 PHP 代码利用 :
// take the referer
$thereferer = strtolower($_SERVER['HTTP_REFERER']);
// see if it comes from google
if (strpos($thereferer,"google")) {
// delete all before q=
$a = substr($thereferer, strpos($thereferer,"q="));
// delete q=
$a = substr($a,2);
// delete all FROM the next & onwards
if (strpos($a,"&")) {
$a = substr($a, 0,strpos($a,"&"));
}
// we have the results.
$mygooglekeyword = urldecode($a);
}
and we can use <?= $mygooglekeywords ?> when we want to output the
keywords.
您可以获取引用 URL 并从查询字符串中获取搜索词。搜索将在查询中显示为“q=searchTerm”,其中 searchTerm 是您想要的文本。
抱歉,再多一点
添加对 Bing、Yahoo 和 Altavista的支持
<?php
if (@$_SERVER['HTTP_REFERER']) {
$referringPage = parse_url($_SERVER['HTTP_REFERER']);
if (stristr($referringPage['host'], 'google.')
|| stristr($referringPage['host'], 'bing.')
|| stristr($referringPage['host'], 'yahoo.')) {
parse_str( $referringPage['query'], $queryVars );
if (stristr($referringPage['host'], 'google.')
|| stristr($referringPage['host'], 'bing.')) { $search = $queryVars['q']; }
else if (stristr($referringPage['host'], 'yahoo.')) { $search = $queryVars['p']; }
else { $search = false; }
if ($search) { $search = str_replace("+"," ",$search); }}
else { $search = false; }}
else { $search = false; }
if ($search) { echo "You're in the right place for ".$search; }
?>
同样的事情,但有一些错误处理
<?php
if (@$_SERVER['HTTP_REFERER']) {
$referringPage = parse_url($_SERVER['HTTP_REFERER']);
if (stristr($referringPage['host'], 'google.')) {
parse_str( $referringPage['query'], $queryVars );
$google = $queryVars['q'];
$google = str_replace("+"," ",$google); }
else { $google = false; }}
else { $google = false; }
if ($google) { echo "You searched for ".$google." at Google then came here!"; }
else { echo "You didn't come here from Google"; }
?>