【发布时间】:2011-09-30 09:53:35
【问题描述】:
我是一个 PHP 新手,试图找到一种方法来使用 parse_str 从数据库中解析多个 URL(注意:不是来自请求,它们已经存储在数据库中,不要问...所以 _GET 不起作用)
所以我正在尝试这个:
$parts = parse_url('http://www.jobrapido.se/?w=teknikinformat%C3%B6r&l=malm%C3%B6&r=auto');
parse_str($parts['query'], $query);
return $query['w'];
请注意,这里我只是提供一个示例 URL,在实际应用程序中,该 URL 将作为来自数据库的参数传入。如果我这样做,它工作正常。但是,我不明白如何正确使用此功能,以及如何避免错误。
首先,这里我使用“w”作为返回的索引,因为我可以清楚地看到它在查询中。但是这些东西是如何工作的呢?是否有一组特定值可以用来获取整个查询字符串?我的意思是,如果我进一步看,我也可以在这里看到“l”和“r”......
当然,我也可以提取这些值并将结果连接起来,但是这些值名称是任意的,还是有办法准确知道要提取哪些值?当然还有“q”值,我最初认为这是我唯一需要的值,但显然不是。它甚至不在示例 URL 中,尽管我知道它在许多其他 URL 中。
那么我该怎么做呢?这就是我想要的:
- 提取查询字符串的所有部分,为我提供 URL 的搜索字符串部分的可读输出(因此在上面它将是“teknikinformatör Malmö auto”。请注意,我需要将 URL 编码转换为瑞典语字符,有什么简单的方法可以在 PHP 中做到这一点?)
- 处理错误,以便如果上述方法由于某种原因不起作用,该方法应该只返回一个空字符串,从而不会破坏代码。因为在这一点上,如果我使用上面的实际参数 $url,而不是示例 URL,我会得到错误,因为许多 URL 没有“ w" 参数,有的可能是数据库中的空字段,有的可能是格式错误等。那么如何稳定地处理这些错误,如果解析成功则返回一个值,否则返回空字符串?
似乎发生了一个非常奇怪的问题,我在调试过程中看不到。我把这个测试代码放进去只是为了看看发生了什么:
function getQuery($url)
{
try
{
$parts = parse_url($url);
parse_str($parts['query'], $query);
if (isset($query['q'])) {
/* return $query['q']; */
return '';
}
} catch (Exception $e) {
return '';
}
}
现在,显然在实际代码中,我希望返回注释掉的部分。然而,令人费解的是:
据我所知,使用这段代码,每条路径都应该返回一个空字符串。但这不起作用 - 它在结果页面中给了我一个完全空的网格。在调试过程中没有错误或任何东西,当我在调试过程中单步执行对象时,它们看起来很好。
但是,如果我从这个方法中删除所有内容,除了 return '';然后它工作正常 - 当然,查询应该是网格中的字段是空的,但所有其他字段都具有应有的所有信息。所以这只是一个测试。但是,应该只能返回一个空字符串的代码怎么可能不起作用,而只返回一个空字符串并且什么都不做的代码却可以工作呢?我彻底糊涂了……
【问题讨论】:
标签: php parsing query-string