0

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

4

1 回答 1

0

您似乎正在尝试从字符串中解析 url,而不是从当前请求中解析 url(如评论中所述)

在评论中的 PHP 文档中,有一个很棒的功能,它完全符合您的要求,我已经在此处复制了它,因此可以在将来的参考中使用它 - 所有功劳归于“Simon 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));
于 2011-09-29T23:16:16.110 回答