2013-03-22 2 views
1

Я пытаюсь получить часть URL на моем сайтеПолучить часть динамического URL

В этой ситуации:

http://mywebsite/filexx/yyyyy/abaete/374  

$url2 = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 

if(preg_match("/\/(\d+)$/",$url2,$matches)) 
{ 
    $meuid = $matches[1]; 
} 

своих работ, но позволяет поставить 2 разные ситуации:

http://mywebsite/filexx/yyyyy/abaete/374/?p=1 
// i'm try to get the 374 (ID) 

http://mywebsite/filexx/yyyyy/374/?p=1 
// here the same 

поэтому я хочу получить последнюю часть, если целое число (374) или часть перед запросом 374 /? P = 1. Поэтому я хочу 374.

Спасибо.

+2

'. *?/(\ D +)'? :) (он также будет игнорировать '/? getval1 = 1 & getval2 = 2 & etc = etc') – 2013-03-22 14:38:11

+0

Можете ли вы обобщить правила, которые вы используете, чтобы соответствовать? Всегда ли это число в этой должности? – Daedalus

+0

Кроме того, это всегда 3 или более цифр? вы можете изменить свое регулярное выражение, чтобы искать 3 + цифры вместо 1+ – Syndrose

ответ

1

я просто сделать мой комментарий в ответ:

<?php 
    $string = 'http://mywebsite/filexx/yyyyy/abaete/374/?g=123'; 
    $matches = array(); 

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

    echo '<pre>'; 
    print_r($matches); 
    echo '</pre>'; 
?> 

Он также будет игнорировать/getval1 = 1 & getval2 = 2 & и т.д. = и т.д.

Выход

Array 
(
    [0] => Array 
     (
      [0] => http://mywebsite/filexx/yyyyy/abaete/374/ 
     ) 

    [1] => Array 
     (
      [0] => 374 
     ) 

) 
+0

не работал для меня –

+0

Я обновил ответ. Нормальное регулярное выражение не будет работать на PHP, поскольку вам нужно избежать косой черты. – 2013-03-22 14:48:56

+0

Да работает, $ matches [1] [0] всегда будет ID, который мне нужен. Спасибо приятель. –

0
$url = 'http://mywebsite/filexx/yyyyy/abaete/374/?p=1'; 

$explodedUrl = explode('/',$url); 
$countArray = count($explodedUrl); 
if(strpos($explodedUrl[$countArray-1],'?') === FALSE){ 
    $yourId = $explodedUrl[$countArray-1]; 
} else { 
    $yourId = $explodedUrl[$countArray-2]; 
} 

$yourId содержит ваш Id

+0

Хорошо, но если есть такой URL-адрес? $ url = http: // mywebsite/filexx/yyyyy/abaete/374? –

+0

Что делать, если значения GET за URL-адресом растут долго и становятся более сложными и, возможно, даже контейнерами новых (экранированных) слэшей? – 2013-03-22 14:45:11

0
http://mywebsite/filexx/yyyyy/abaete/374  

$url2 = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 

if(preg_match('~([0-9]+)\/\?p=~', $url2, $matches)) 
{ 
    $meuid = $matches[1]; 
} 

Это получает цифры перед /? P =.

+0

это получить до P, но у меня есть 2 ситуации без /? P и с помощью?? Pi может две две разные функции для каждой ситуации, im попробуйте одно решение для работы в обоих случаях. –

+0

Я предлагаю добавить идентификатор перед идентификатором, или он может запутать. Вы можете сделать что-то вроде «http: // mywebsite/filexx/yyyyy/abaete/meuid-374 /? P = 1». – C9HDN

Смежные вопросы