使用PHP从(搜索引擎)引荐网址获取关键字
-
05-07-2019 - |
题
我正在尝试从引荐来源网址获取搜索关键字。目前,我正在使用以下代码用于Google网址。但有时它不起作用......
$query_get = "(q|p)";
$referrer = "http://www.google.com/search?hl=en&q=learn+php+2&client=firefox";
preg_match('/[?&]'.$query_get.'=(.*?)[&]/',$referrer,$search_keyword);
还有其他/清洁/工作方式吗?
谢谢你, 普拉萨德
解决方案
如果您使用的是PHP5,请查看 http://php.net/parse_url 和 http://php.net/parse_str
示例:
// The referrer $referrer = 'http://www.google.com/search?hl=en&q=learn+php+2&client=firefox'; // Parse the URL into an array $parsed = parse_url( $referrer, PHP_URL_QUERY ); // Parse the query string into an array parse_str( $parsed, $query ); // Output the result echo $query['q'];
其他提示
不同的搜索引擎上有不同的查询字符串。在尝试了Wiliam的方法后,我找到了自己的方法。 (因为雅虎正在使用'p',但有时'q')
$referrer = "http://search.yahoo.com/search?p=www.stack+overflow%2Ccom&ei=utf-8&fr=slv8-msgr&xargs=0&pstart=1&b=61&xa=nSFc5KjbV2gQCZejYJqWdQ--,1259335755";
$referrer_query = parse_url($referrer);
$referrer_query = $referrer_query['query'];
$q = "[q|p]"; //Yahoo uses both query strings, I am using switch() for each search engine
preg_match('/'.$q.'=(.*?)&/',$referrer,$keyword);
$keyword = urldecode($keyword[1]);
echo $keyword; //Outputs "www.stack overflow,com"
谢谢你, 普拉萨德
要补充其他答案,请注意包含搜索字词的查询字符串参数因搜索提供程序而异。这段PHP代码显示了正确的参数:
$search_engines = array(
'q' => 'alltheweb|aol|ask|ask|bing|google',
'p' => 'yahoo',
'wd' => 'baidu',
'text' => 'yandex'
);
<?php
class GET_HOST_KEYWORD
{
public function get_host_and_keyword(<*>url) {
$p = $q = "";
$chunk_url = parse_url(<*>url);
<*>data["host"] = ($chunk_url['host'])?$chunk_url['host']:'';
parse_str($chunk_url['query']);
<*>data["keyword"] = ($p)?$p:(($q)?$q:'');
return <*>data;
}
}
// Sample Example
$obj = new GET_HOST_KEYWORD();
print_r($obj->get_host_and_keyword('http://www.google.co.in/search?sourceid=chrome&ie=UTF-&q=hire php php programmer'));
// sample output
//Array
//(
// [host] => www.google.co.in
// [keyword] => hire php php programmer
//)
// $search_engines = array(
// 'q' => 'alltheweb|aol|ask|ask|bing|google',
// 'p' => 'yahoo',
// 'wd' => 'baidu',
// 'text' => 'yandex'
//);
?>
$query = parse_url($request, PHP_URL_QUERY);
这个应该适用于谷歌,必应和有时雅虎搜索:
if( isset(这个应该适用于谷歌,必应和有时雅虎搜索:
<*>SERVER['HTTP_REFERER']) && 这个应该适用于谷歌,必应和有时雅虎搜索:
<*>SERVER['HTTP_REFERER']) {
$query = getSeQuery(这个应该适用于谷歌,必应和有时雅虎搜索:
<*>SERVER['HTTP_REFERER']);
echo $query;
} else {
echo "I think they spelled REFERER wrong? Anyways, your browser says you don't have one.";
}
function getSeQuery($url = false) {
$segments = parse_url($url);
$keywords = null;
if($query = isset($segments['query']) ? $segments['query'] : (isset($segments['fragment']) ? $segments['fragment'] : null)) {
parse_str($query, $segments);
$keywords = isset($segments['q']) ? $segments['q'] : (isset($segments['p']) ? $segments['p'] : null);
}
return $keywords;
}
我相信谷歌和雅虎已经更新了他们的算法,以排除网址中的搜索关键字和其他参数,这些参数无法使用http_referrer方法接收。
如果以上建议仍然提供搜索关键字,请与我们联系。
我在网站末尾使用http referrer时,现在收到的信息如下。
来自google: https://www.google.co.in/ 来自雅虎: https://in.yahoo.com/
参考: https://webmasters.googleblog的.com / 2012/03 /即将到来的-变化功能于谷歌-http.html
不隶属于 StackOverflow