在PHP中获取查询字符串不起作用

时间:2011-09-29 23:13:42

标签: php query-string parse-url

我是一个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索引只是一个例子,我以为如果我设法只取出文本部分,我会把它连接起来)?

1 个答案:

答案 0 :(得分:0)

您似乎试图从字符串中解析网址,而不是从当前请求解析(如评论中所述)

在评论中的PHP文档中,有一个很棒的功能,它完全符合您的要求,我已将其复制到此处,因此可以在以后的参考资料中使用 - 所有功劳都归功于“Simon D” - {{ 3}}

<?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));