php,如何从网址中获取关键字?

时间:2011-08-12 18:55:06

标签: php mysql

问题可能有点令人困惑,所以这就是我所拥有的:

我在数据库中插入一个人来自的上一个链接,如tihs:

$came_from = $_SERVER['HTTP_REFERER']; // get previous link

如果链接来自google.com,它将会是这样的:

http://www.google.com/#sclient=psy&hl=en&source=hp&q=this+is+a+test&pbx=1&oq=this+is+a+teat&aq=f&aqi=g-s1g-v1&aql=1&gs_sm=s&gs_upl=887l82702l3.10.3.1l17l0&bav=on.2,or.r_gc.r_pw.r_cp.&fp=c3d3303&biw=1920&bih=995

如果我们查看内部,我们可以找到q=this+is+a+test作为我搜索的关键字。

我的问题是我如何创建一个返回http://www.google.com/ | this+is+a+test的查询?

我知道关键字之间有+符号。

到目前为止,我想出了这个,但不完全是我想要的:

SELECT SUBSTRING_INDEX (table, '+', 1), table FROM table.table WHERE table LIKE '%+%' LIMIT 20

任何想法?

感谢

编辑:发生的事情是,有时我得到的其他网址没有q=但可能是seearch=,所以我想跟踪+符号

3 个答案:

答案 0 :(得分:2)

正如已经指出的那样,如果不提供要查找的参数,就无法可靠地获取关键字。这就是我要做的事情:

$url = 'http://www.google.com/#sclient=psy&hl=en&source=hp&q=this+is+a+test&pbx=1&oq=this+is+a+teat&aq=f&aqi=g-s1g-v1&aql=1&gs_sm=s&gs_upl=887l82702l3.10.3.1l17l0&bav=on.2,or.r_gc.r_pw.r_cp.&fp=c3d3303&biw=1920&bih=995';

$possible = array('q', 'ssearch', 'oq');

$query_str = NULL;
foreach ($possible as $search) {
    if (isset($arr[$search])) {
        $query_str = $arr[$search];
        break;
    }
}

基本上所有这一切都是使用PHP的parse_str()解析url并查找参数q。如果不存在,则使用ssearch,然后使用oq。如果需要,您可以添加更多。如果在它的末尾找不到它,$ query_str将为NULL。


除非你有一个非常令人信服的理由只使用MySQL,否则只需处理PHP端的所有内容。数据库用于存储数据,而不是处理数据。我要做的是让PHP弄清楚搜索引擎和使用的关键字,并将它们作为单独的字段插入到数据库中。即,有一个像这样的表:

search_engine | query_str
------------- | -----------
google        | test
yahoo         | something
...

答案 1 :(得分:0)

如果你知道你需要q = ...那么你可以使用正则表达式。如果那是你需要的,我会更新帖子。

答案 2 :(得分:0)

正如大家所说,您需要使用键值(在您的示例中为q)。在MySQL中,你可以这样做:

SELECT SUBSTRING_INDEX(table, '?q=', -1), table FROM table.table WHERE table LIKE '?' LIMIT 20

我还建议您将表格列重命名为“table”以外的其他内容。