首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 解析 HTTP_REFERER 獲取搜尋引擎關鍵字

     編輯:PHP 相關知識

核心邏輯

  1. 取得 $_SERVER['HTTP_REFERER']。
  2. 判斷來源域名(Google、Baidu 等)。
  3. 依各引擎查詢參數名(q、wd)提取關鍵字。
  4. urldecode() 解碼,必要時轉換編碼(Baidu 為 GBK)。

完整實作

<?php
function getSearchKeyword()
{
    $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    if (!$referer) return '';

    $engines = [
        'google' => ['domain' => 'google.com', 'param' => 'q', 'charset' => 'UTF-8'],
        'baidu'  => ['domain' => 'baidu.com',  'param' => 'wd', 'charset' => 'GBK'],
        'bing'   => ['domain' => 'bing.com',   'param' => 'q',  'charset' => 'UTF-8'],
        'sogou'  => ['domain' => 'sogou.com',  'param' => 'query', 'charset' => 'UTF-8'],
    ];

    foreach ($engines as $name => $conf) {
        if (stripos($referer, $conf['domain']) !== false) {
            $kw = extractParam($referer, $conf['param']);
            if ($kw) {
                $kw = urldecode($kw);
                if (strtoupper($conf['charset']) !== 'UTF-8') {
                    $kw = mb_convert_encoding($kw, 'UTF-8', $conf['charset']);
                }
                return ['engine' => $name, 'keyword' => $kw];
            }
        }
    }
    return '';
}

function extractParam($url, $param)
{
    $start = stripos($url, $param.'=');
    if ($start === false) return '';
    $start += strlen($param) + 1;
    $end = strpos($url, '&', $start);
    return $end ? substr($url, $start, $end-$start) : substr($url, $start);
}

// 使用
$result = getSearchKeyword();
if ($result) {
    echo "來自 {$result['engine']} 搜尋:{$result['keyword']}";
}
?>

注意事項

  • HTTP_REFERER 可被偽造或被瀏覽器/防火牆攔截,不可作為安全依據。
  • HTTPS → HTTP 導航時瀏覽器不發送 Referer。
  • 現代搜尋引擎多改用 POST 或加密參數,關鍵字獲取率逐年下降。
  • 建議改用站內搜尋記錄、Google Search Console API 或 UTM 參數追蹤來源。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved