2011-09-29 50 views
0

我是一個PHP新手,我試圖按照如何獲取查詢字符串的建議。我希望以可讀的格式搜索單詞。在PHP中獲取查詢字符串不起作用

現在,這些字符串來自一個數據庫,它們之前已經使用Asp.Net中的請求對象的referer屬性進行了收集。但據我所知,不應該有任何區別。

所以,我想這一點:

function getQuery($url) 
{ 
     $processed_url = parse_url($url); 

     $query_string = $processed_url['query']; 
     if($url != '') 
     { 
      return $query_string; 
     } 
     else 
     { 
      return $url; 
     } 
} 

所以我嘗試了變化,這也應該提取查詢字符串:

$query = parse_url($url, 6); 

    return $query; 

嘛,那種作品。它給了我一個查詢字符串部分,但包括「q =」和所有這些,而不僅僅是查詢字符串的文本。

所以,我想在這個parse_str()函數,它應該是能夠解析查詢字符串本身:

parse_str($query, $myArray); 
return $myArray[0]; 

但是,這並沒有在所有的工作,它讓我在沒有任何結果結果頁面(網格)。

我在做什麼錯?首先用第一種方法獲取上面的查詢,其次將查詢字符串解析爲其組件? (0索引僅僅是一個例子,我以爲如果我只設法得到文本部分,我會在以後連接它)?

回答

0

這似乎是你正試圖從一個字符串解析的網址,而不是從當前請求(如在評論中提及)

在註釋中的PHP文件,還有一個很大的功能,但這你想要什麼,我在這裏複製它,所以它可以在將來參考使用 - 一切歸功於「西門d」 - http://dk.php.net/manual/en/function.parse-url.php#104527

<?php 
/** 
* Returns the url query as associative array 
* 
* @param string query 
* @return array params 
*/ 
function convertUrlQuery($query) { 
    $queryParts = explode('&', $query); 

    $params = array(); 
    foreach ($queryParts as $param) { 
     $item = explode('=', $param); 
     $params[$item[0]] = $item[1]; 
    } 

    return $params; 
} 
?> 

,這意味着它應該像這樣使用:

$array = convertUrlQuery(parse_url($url, 6)); 
+0

我不明白,我怎麼能用一個來自數據庫的url字符串(而不是當前的請求)來做到這一點?如果我誤解了,請給我一個用法示例... – Anders

+0

url字符串如何從數據庫中獲取?你在做什麼? –

+0

正如我所提到的,它們以前已經存儲在數據庫中,來自Asp.Net中的請求對象。所以當前的PHP應用程序需要做的是能夠讀取數據庫中的這些URL並將它們解析爲可讀格式以便在網格中顯示。 – Anders