PHP自定义函数获取搜索引擎来源关键字的方法

阅读次数:1850 次  |  发布时间:2019-02-04T00:00:00Z 

本文实例讲述了PHP自定义函数获取搜索引擎来源关键字的方法。分享给大家供大家参考,具体如下:

获取搜索引擎来源关键字的函数:


    function getKeywords() {
      // 搜索引擎关键字映射
      static $host_keyword_map = array(
          'www.baidu.com' => 'wd',
          'v.baidu.com' => 'word',
          'image.baidu.com' => 'word',
          'news.baidu.com' => 'word',
          'www.so.com' => 'q',
          'video.so.com' => 'q',
          'image.so.com' => 'q',
          'news.so.com' => 'q',
          'www.sogou.com' => 'query',
          'pic.sogou.com' => 'query',
          'v.sogou.com' => 'query',
      );
      // 检查来源是否搜索引擎
      if (!isset($_SERVER['HTTP_REFERER'])) {
        return '';
      }
      $urls = parse_url($_SERVER['HTTP_REFERER']);
      if (!array_key_exists($urls['host'], $host_keyword_map)) {
        return '';
      }
      $key = $host_keyword_map[$urls['host']];
      // 检查关键字参数是否存在
      if (!isset($urls['query'])) {
        return '';
      }
      $params = array();
      parse_str($urls['query'], $params);
      if (!isset($params[$key])) {
        return '';
      }
      $keywords = $params[$key];
      // 检查编码
      $encoding = mb_detect_encoding($keywords, 'utf-8,gbk');
      if ($encoding != 'utf-8') {
        $keywords = iconv($encoding, 'utf-8', $keywords);
      }
      return $keywords;
    }
    
    

函数测试:


    <?php
    header("Content-Type: text/html; charset=utf-8");
    $referers = array(
        'http://www.baidu.com/s?cl=3&wd;=%B9%E9%C0%B4&fr;=vid1000',
        'http://www.baidu.com/s?tn=92506501_hao_pg&rtt;=1&bsst;=1&wd;=%B9%E9%C0%B4',
        'http://www.baidu.com/link?url=ctBhF7AAau6LwE61pJOEH-ZhgUM7D3YHYMrm6xIXJlDQtMXCiea7gg49s90Q-Qh8wHD8Ano-dPNhUawBBNEEwEbtu8toMF5k1V7Xy850EtlpZyMcS0e_y-SCJp86iM6e&wd;=%E5%BD%92%E6%9D%A5&tn;=baidu&ie;=utf-8&inputT;=2980',
        'http://www.baidu.com/link?url=TIn9NR6fwiy6IwwkCcVF8HhHoxVUpHQsyj1YdlQPy2roXKTnSQS_3UxwvyjZ2JPkpxF8-diSoRCSpODUM_jq2K&wd;=%E5%BD%92%E6%9D%A5&tn;=baidu&ie;=utf-8&input;', 
        'http://news.baidu.com/ns?cl=2&rn;=20&tn;=news&word;=%E5%BD%92%E6%9D%A5&ie;=utf-8',
        'http://image.baidu.com/i?ct=503316480&z;=&tn;=baiduimagedetail&ipn;=d&word;=%E5%BD%92%E6%9D%A5&step;_word=&ie;=utf-8&in;=17668&cl;=2&lm;=-1&st;=&pn;=6&rn;=1&di;=70447907090&ln;=1994&fr;=news&&fmq;=1402285886106_R&ic;=&s;=&se;=&sme;=0&tab;=&width;=&height;=&face;=&is;=&istype;=&ist;=&jit;=&objurl;=http%3A%2F%2Fpic31.nipic.com%2F20130713%2F1287761_225159187345_2.jpg',
        'http://v.baidu.com/v?ct=301989888&s;=25&ie;=utf-8&word;=%E5%BD%92%E6%9D%A5',
        'http://www.so.com/s?ie=utf-8&shb;=1&src;=360sou_newhome&q;=%E5%BD%92%E6%9D%A5',
        'http://video.so.com/v?q=%E5%BD%92%E6%9D%A5&src;=tab_www',
        'http://image.so.com/v?q=%E5%BD%92%E6%9D%A5&src;=tab_video&fromurl;=http%3A%2F%2Fndent.oeeee.com%2Fhtml%2F201309%2F16%2F258899.html',
        'http://news.so.com/ns?q=%E5%BD%92%E6%9D%A5&src;=tab_video',
        'http://www.sogou.com/web?query=%E5%BD%92%E6%9D%A5&_asf=www.sogou.com&_ast=1402284372&w;=01019900&p;=40040100&ie;=utf8&sut;=6558&sst0;=1402284372272&lkt;=0%2C0%2C0',
        'http://www.sogou.com/web?query=%E5%BD%92%E6%9D%A5&_asf=www.sogou.com&_ast=1402284372&w;=01019900&p;=40040100&ie;=utf8&sut;=6558&sst0;=1402284372272&lkt;=0%2C0%2C0',
        'http://pic.sogou.com/d?query=%B9%E9%C0%B4&mood;=0&picformat;=0&mode;=1&di;=0&w;=03021800&dr;=1&did;=1',
        'http://v.sogou.com/v?query=%B9%E9%C0%B4&p;=&w;=',
        'http://www.baidu.com/s?aaa=bbb',
        'http://www.baidu.com/',
        'http://www.jb51.net/',
    );
    foreach ($referers as $r) {
      $_SERVER['HTTP_REFERER'] = $r;
      echo getKeywords(), "\n";
    }
    
    

搜索引擎占有比率:

http://engine.data.cnzz.com/

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP错误与异常处理方法总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

最近发布的代码:

获取php时间戳 PHP 程序  |  8次阅读  | 发布于:2020-08-01T23:05:19Z
php获取tempfile路径 PHP 程序  |  8次阅读  | 发布于:2020-08-01T23:03:16Z
php 1,1,2,3,5,8,13,21,34...求第30位的数是多少? PHP 程序  |  11次阅读  | 发布于:2020-08-01T23:03:00Z
PHP执行shell PHP 程序  |  22次阅读  | 发布于:2020-02-08T16:48:28Z
PHP获取HTTP body内容 PHP 程序  |  53次阅读  | 发布于:2019-12-09T14:35:47Z
php读取目录下的所有文件 PHP 程序  |  59次阅读  | 发布于:2019-11-18T18:50:49Z
php判断是爬虫在访问还是用户浏览器在访问 PHP 程序  |  62次阅读  | 发布于:2019-11-12T19:16:47Z
PHP通过UserAgent识别爬虫 PHP 程序  |  49次阅读  | 发布于:2019-11-12T19:16:03Z
PHP使用curl发起post请求 PHP 程序  |  61次阅读  | 发布于:2019-11-10T21:43:33Z
PHP版HelloWorld PHP 程序  |  47次阅读  | 发布于:2019-10-31T00:14:24Z
实现水仙花数的5个示例 PHP 程序  |  83次阅读  | 发布于:2019-10-29T23:22:58Z
PHP输出所有位数的水仙花 PHP 程序  |  41次阅读  | 发布于:2019-10-28T08:44:36Z
PHP水仙花数实现代码 PHP 程序  |  45次阅读  | 发布于:2019-10-28T08:38:23Z
根据文件后缀判断是否为代码文件 PHP 程序  |  82次阅读  | 发布于:2019-10-20T14:39:03Z
PHP判断访问者是否为手机 PHP 程序  |  78次阅读  | 发布于:2019-10-20T14:37:38Z
PHP判断字符是否以xxx开头 PHP 程序  |  74次阅读  | 发布于:2019-10-10T01:55:24Z
PHP压缩文件 PHP 程序  |  100次阅读  | 发布于:2019-10-10T01:53:17Z
PHP解压文件 PHP 程序  |  43次阅读  | 发布于:2019-10-10T01:51:36Z
PHP生成随机字符串 PHP 程序  |  54次阅读  | 发布于:2019-10-10T01:49:40Z
PHP判断路径是否合法,不能有./ ../等安全隐患 PHP 程序  |  97次阅读  | 发布于:2019-10-10T01:48:56Z
PHP在服务端通过浏览器的User-Agent判断网页的客户端类型 PHP 程序  |  76次阅读  | 发布于:2019-10-10T01:26:15Z
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态 PHP 程序  |  1123次阅读  | 发布于:2019-02-04T00:00:00Z
WordPress的主题编写中获取头部模板和底部模板 PHP 程序  |  1084次阅读  | 发布于:2019-02-04T00:00:00Z
PHP实现批量清空删除指定文件夹所有内容的方法 PHP 程序  |  1041次阅读  | 发布于:2019-02-04T00:00:00Z
PHP面向对象继承用法详解(优化与减少代码重复) PHP 程序  |  989次阅读  | 发布于:2019-02-04T00:00:00Z
玩转虚拟域名◎+ . PHP 程序  |  909次阅读  | 发布于:2019-02-04T00:00:00Z
值得分享的php+ajax实时聊天室 PHP 程序  |  936次阅读  | 发布于:2019-02-04T00:00:00Z
PHP中使用substr()截取字符串出现中文乱码问题该怎么办 PHP 程序  |  933次阅读  | 发布于:2019-02-04T00:00:00Z
模仿OSO的论坛(二) PHP 程序  |  854次阅读  | 发布于:2019-02-04T00:00:00Z
sqlyog 中文乱码问题的设置方法 PHP 程序  |  859次阅读  | 发布于:2019-02-04T00:00:00Z

最多阅读的代码

 PHP分页显示制作详细讲解 PHP 程序  |  2117次阅读
 在Zeus Web Server中安装PHP语言支持 PHP 程序  |  1658次阅读
 再谈PHP中单双引号的区别详解 PHP 程序  |  1617次阅读
 PHP实现简单爬虫的方法 PHP 程序  |  1571次阅读
 php+ajax+json 详解及实例代码 PHP 程序  |  1568次阅读
 桌面中心(一)创建数据库 PHP 程序  |  1543次阅读
 PHP设计模式之工厂模式与单例模式 PHP 程序  |  1541次阅读
 php封装的page分页类完整实例 PHP 程序  |  1541次阅读
 php数组合并array_merge()函数使用注意事项 PHP 程序  |  1533次阅读
 Yii2汉字转拼音类的实例代码 PHP 程序  |  1513次阅读
 使用WAMP搭建PHP本地开发环境 PHP 程序  |  1383次阅读
 redirect_uri参数错误的解决方法(必看) PHP 程序  |  1371次阅读
 thinkPHP5.0框架简单配置作用域的方法 PHP 程序  |  1370次阅读
 php查询及多条件查询 PHP 程序  |  1369次阅读
 Zend Framework分发器用法示例 PHP 程序  |  1342次阅读
 php连接oracle数据库的方法(测试成功) PHP 程序  |  1341次阅读
 PHP实现根据银行卡号判断银行 PHP 程序  |  1340次阅读
 PHP Header用于页面跳转时的几个注意事项 PHP 程序  |  1330次阅读
 PHP 生成的XML以FLASH获取为乱码终极解决 PHP 程序  |  1325次阅读
 php封装一个异常的处理类 PHP 程序  |  1325次阅读
 ThinkPHP3.1新特性之Action参数绑定 PHP 程序  |  1321次阅读
 mantis安装、配置和使用中的问题小结 PHP 程序  |  1321次阅读
 PHP环境搭建最新方法 PHP 程序  |  1314次阅读