2011-08-12 20 views
0

的問題可能會有點混亂,所以這裏就是我:PHP中,如何從URL中獲取關鍵字?

我在數據庫中插入,當一個人從像tihs傳來一個鏈接:

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

如果鏈接從谷歌.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爲beeing我搜索的關鍵字。

我的問題是我如何創建一個查詢返回http://www.google.com/ | this+is+a+test

我知道這些關鍵字之間有+登錄。

到目前爲止,我想出了這個,但不正是我想要的:

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

什麼想法?

感謝

編輯:發生了什麼是,有時我得到一些其他URL的沒有q=但也許seearch=,所以我要跟蹤+標誌

+2

我用你的方法看到的第一個問題是,如果搜索字符串是單個單詞,它將失敗。順便說一句,你如何計劃得到它而不依靠'q ='? – NullUserException

+0

我仍然不明白爲什麼你不會使用像Regexp這樣的東西,這樣你可以同時查找'q ='和'seearch ='以及其他你需要的鍵 –

回答

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 
... 
+0

nope,這不會幫助我很多,我正在尋找一個mysql查詢 – Patrioticcow

+1

@Patrio雖然我不會說這是不可能與MySQL做到這一點,但這將是不必要的複雜,可能不可靠。 *爲什麼*你想要一個只有mysql的查詢? – NullUserException

0

的。如果你知道你需要q = ...那麼你可以使用正則表達式。如果這是您需要的,我會更新帖子。

+0

我知道,但我不想要使用'q =' – Patrioticcow

+1

所以基本上你想要查找某個鍵的值,而不是給鍵(在這個例子中是q)? –

+0

是的,我只想跟蹤+號 – Patrioticcow

0

由於大家都在說,你需要使用的鍵值(在你的榜樣,q)。在MySQL中,你可以做這樣的事情:

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

我還建議你重命名你的表列到'table'以外的東西。

+1

這不太合適,因爲它會包含額外的不必要的東西。我會在應用程序方面處理這個問題。 – NullUserException

+0

謝謝,但我真的不需要使用q =,我只需要跟蹤+號 – Patrioticcow

+1

因爲大家都在說'+'符號是爲WHITESPACE編碼的東西,因此,如果不會有任何空格,您查詢將不會返回所需的網址(不包括行) –

相關問題