php将URL的一部分转换为字符串

时间:2013-05-20 00:18:29

标签: php regex

大家好我使用此代码获取我的网址上的ID

$string = $url;
$matches = array();
preg_match_all('/.*?\/(\d+)\/?/s', $string, $matches);

$id = $matches[1][0];

此代码适用于

等网址
http://mysite.com/page/1
http://mysite.com/page/somepage/2
http://mysite.com/page/3/?pag=1

我将拥有id = 1 / id = 2 / id = 3

但对于像这样的网址

http://mysite.com/page/122-page-name/1

这会返回id = 122

我想尝试获取始终将是网址的最后部分或将有/?p =之后

所以网址类型我可以

http://mysite.com/page/1
http://mysite.com/page/some-page/2
http://mysite.com/page/12-some-name/3
http://mysite.com/page/some-page/4/?p=1
http://mysite.com/page/13-some-page/5/?p=2

id = 1 / id = 2 / id = 3 / id = 4 / id = 5

4 个答案:

答案 0 :(得分:0)

如果您的ID始终位于网址的末尾,则可以explode您网址的内容并获取结果数组的最后一个元素。如果它可能包含变量(例如?pag=1),您可以在explode之后添加验证以检查变量。

$urlArray = explode('/', $url);
$page = end($urlArray);
if(strpos($page, 'pag')!==false){
    //get the contents of the variable from the $page variable
    //exploding the variable through the ? variable and getting
    //the numeric characters at the end
}

答案 1 :(得分:0)

我倾向于使用URL解析而不是尝试使用正则表达式,特别是如果你有各种各样的(有效)URL需要处理。

end(array_filter(explode('/', parse_url($url, PHP_URL_PATH))));

array_filter处理trailng斜杠。

答案 2 :(得分:0)

由于它总是在最后或者在它之后有?p = x,你可以执行以下操作:

$params = explode('/', $_SERVER['REQUEST_URI']);
$c = count($params);
if (is_int($params[$c - 1])  
    $id = $params[$c - 1];
else
    $id = $params[$c - 2];

答案 3 :(得分:0)

不是直接的答案,更多的是“如何为自己解决这个问题”的答案:]

将此代码放在页面顶部,在其他任何内容之前(但在<?php之后)

foreach($_SERVER as $k => $v) {
    echo $k.' = '.$v.'<br />';
}
exit;

现在在不同的选项卡中加载每个不同的URI并查看结果。你应该能够找出你需要做的事情。