0

こんにちは、このコードを使用して私の URL の ID を取得しています

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

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

このコードは、次のような URL に対して機能します

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

id = 1 / id = 2 / id = 3 になります

しかし、このようなURLの場合

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

これは id = 122 を返します

取得しようとしている ID は、常に URL の最後の部分になるか、/?p= の後にあります

だから私が持つことができるURLタイプ

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

私は正規表現を使用するよりも 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 に答える
0

ID が常に URL の末尾にある場合は、URLexplodeのコンテンツを取得して、結果の配列の最後の要素を取得できます。変数 ( など?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 に答える