大家好我使用此代码获取我的网址上的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
答案 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并查看结果。你应该能够找出你需要做的事情。