0

大家好,我正在使用此代码获取我的网址上的 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

我尝试获取的 id 将始终是 url 的最后一部分,或者将有 /?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

4 回答 4

0

如果您的 id 将始终位于 url 的末尾,您可以explode获取 url 的内容并获取结果数组的最后一个元素。如果它可能包含变量(如?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
}
于 2013-05-20T00:21:22.273 回答
0

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

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

array_filter与尾斜线的交易。

于 2013-05-20T00:36:13.613 回答
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];
于 2013-05-20T00:36:53.640 回答
0

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

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

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

现在在不同的选项卡中加载每个不同的 URI 并查看结果。你应该能够弄清楚你需要做什么。

于 2013-05-20T00:37:30.190 回答