如何解析这个网址?

时间:2012-02-27 09:55:17

标签: php

如果我有这个网址:node/95/pdf/1。我怎样才能获得数值/值1?尝试了parse_url,但给了我错误的输出。

PS:值1只是一个例子,id是动态的,取决于用户点击的内容。

4 个答案:

答案 0 :(得分:3)

你可以这样做:

$id = end(explode('/', 'node/95/pdf/1'));

示例:

$arr = explode('/', 'node/95/pdf/1');
$id = end($arr);
echo $id;  // 1

答案 1 :(得分:3)

我会使用sscanf

未经测试的例子:

list($node_id, $pdf_id) = sscanf($url, "node/%d/pdf/%d");

$node_id包含节点ID,$pdf_id包含pdf ID。根据你的评论:是的,你可以输出例如echo $pdf_id;

如果您需要在数组中同时使用它们,则可以删除list()方法,如下所示:

$ids = sscanf($url, "node/%d/pdf/%d");

这会在$ids中返回一个包含node和pdf id的数组。

最后,如果您只需要pdf ID,则可以

$id = sscanf($url, "node/95/pdf/%d");

我刚刚展示了如何获取两者,因为我认为你可能需要你的网址中的两个数字。

修改
在发布我的解决方案后看到所有其他答案,我想知道为什么每个人都有多个函数解决这个问题,当有一个可用的功能完全符合他的需要时:根据格式解析一个字符串。这也导致更少sql注入的代码恕我直言。当网址扩展或追加查询字符串时,它不会破坏某些东西。

编辑2 list($node_id, $sub, $sub_id) = sscanf($url, "node/%d/%[^/]/%d");会为您提供" pdf"并且它的ID分开而不是"节点/%d /%s /%d"。这是因为char /也匹配%s。使用%[^/]匹配除正斜杠之外的所有内容。

答案 2 :(得分:2)

$url = "node/95/pdf/1";
// Find the last occurence of a slash, get everything after that.
$id = substr($url, strrpos($url, "/") + 1 );

答案 3 :(得分:0)

尝试:

$input  = 'node/95/pdf/1';
$parts  = explode('/', $input);
$output = (int) $parts[3];