문제

참조 업체 URL에서 검색 키워드를 얻으려고합니다. 현재 Google URL에 다음 코드를 사용하고 있습니다. 그러나 때로는 작동하지 않습니다 ...

$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'
);

원천: http://betterwp.net/wordpress/get-search-keywords-from-referrer/

<?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);

이것은 Google, Bing 및 때로는 Yahoo Search에서 작동해야합니다.

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;
}

Google과 Yahoo는 HTTP_REFERRER 메소드를 사용하여 수신 할 수없는 URL에서 검색 키워드 및 기타 매개 변수를 제외하기 위해 알고리즘을 업데이트했다고 생각합니다.

위의 권장 사항이 여전히 검색 키워드를 제공할지 알려주십시오.

내가 받고있는 것은 내 웹 사이트 끝에서 HTTP 참조자를 사용할 때 아래에 있습니다.

Google에서 : https://www.google.co.in/야후에서 : https://in.yahoo.com/

ref : https://webmasters.googleblog.com/2012/03/upcoming-changes-in-googles-http.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top