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

PHP 解析搜尋引擎 Referer 關鍵字(支援百度、Google、必應等主流引擎)

     編輯:PHP 綜合知識

核心原理

從 $_SERVER['HTTP_REFERER'] 取得來路 URL,依搜尋引擎域名判斷來源,再解析查詢參數中的關鍵字鍵名(如 wd、q、query),最後依引擎編碼轉為網站編碼(通常 UTF-8)。

主流引擎參數與編碼對照

引擎域名關鍵字查詢參數原始編碼
Googlegoogle.com / google.cnqUTF-8
百度baidu.comwd / wordGBK
雅虎yahoo.cnpUTF-8
搜狗sogou.comqueryGBK
搜搜soso.comwGBK
必應bing.comqUTF-8
有道youdao.comqUTF-8

可直接部署的完整函數

<?php
/**
 * 從 Referer 解析搜尋引擎關鍵字
 * @return array ['engine' => 引擎名, 'keyword' => UTF-8 關鍵字, 'raw' => 原始 Referer]
 */
function parseSearchKeyword() {
    $referer = $_SERVER['HTTP_REFERER'] ?? '';
    if (!$referer) return ['engine' => 'direct', 'keyword' => '', 'raw' => ''];

    $engines = [
        ['name' => 'Google',      'domain' => 'google.',     'param' => 'q',      'enc' => 'UTF-8'],
        ['name' => 'Baidu',       'domain' => 'baidu.',      'param' => 'wd',     'enc' => 'GBK'],
        ['name' => 'Baidu',       'domain' => 'baidu.',      'param' => 'word',   'enc' => 'GBK'],
        ['name' => 'Yahoo',       'domain' => 'yahoo.',      'param' => 'p',      'enc' => 'UTF-8'],
        ['name' => 'Sogou',       'domain' => 'sogou.',      'param' => 'query',  'enc' => 'GBK'],
        ['name' => 'Soso',        'domain' => 'soso.',       'param' => 'w',      'enc' => 'GBK'],
        ['name' => 'Bing',        'domain' => 'bing.',       'param' => 'q',      'enc' => 'UTF-8'],
        ['name' => 'Youdao',      'domain' => 'youdao.',     'param' => 'q',      'enc' => 'UTF-8'],
        ['name' => '360',         'domain' => 'so.',         'param' => 'q',      'enc' => 'UTF-8'],
        ['name' => 'Shenma',      'domain' => 'sm.cn',       'param' => 'q',      'enc' => 'UTF-8'],
    ];

    foreach ($engines as $e) {
        if (stripos($referer, $e['domain']) !== false) {
            // 解析查詢字串
            $queryStart = stripos($referer, $e['param'] . '=');
            if ($queryStart !== false) {
                $queryStart += strlen($e['param']) + 1;
                $queryEnd = strpos($referer, '&', $queryStart);
                $keyword = $queryEnd ? substr($referer, $queryStart, $queryEnd - $queryStart) : substr($referer, $queryStart);
                $keyword = urldecode($keyword);
                if ($e['enc'] !== 'UTF-8') {
                    $keyword = mb_convert_encoding($keyword, 'UTF-8', $e['enc']);
                }
                return ['engine' => $e['name'], 'keyword' => $keyword, 'raw' => $referer];
            }
        }
    }
    return ['engine' => 'other', 'keyword' => '', 'raw' => $referer];
}

// 使用範例
$result = parseSearchKeyword();
if ($result['keyword']) {
    echo "來源:{$result['engine']} | 關鍵字:{$result['keyword']}";
    // 可存入 $_SESSION 或資料庫追蹤訂單來源
}
?>

重要提醒

  • Referer 可偽造:僅供統計分析參考,不可作為安全驗證依據。
  • HTTPS → HTTP 會丟失 Referer:現代瀏覽器預設不送 Referer 給非安全站點,建議全站 HTTPS。
  • 隱私模式/瀏覽器擋 Referer:部分用戶會關閉 Referer 傳送,需接受無法取得關鍵字的情況。
  • 編碼轉換務必正確:百度/搜狗/搜搜 為 GBK,轉碼錯誤會產生亂碼;Google/Bing/必應 為 UTF-8 可直接用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved