Извлечение информации из URL с помощью PHP

Я хотел бы использовать PHP для извлечения информации из URL-адреса. Как я могу получить значение «матовый» из URL-адреса:

www.shareit.me/matt 

Кроме того, как я могу проверить, есть ли там значение для начала?


person user2096890    schedule 04.03.2013    source источник
comment
php.net/manual/en/function.parse-url.php   -  person Tchoupi    schedule 04.03.2013
comment
Используйте parse_url.   -  person Diego Agulló    schedule 04.03.2013
comment
дубликат stackoverflow.com/ вопросы/15100249/   -  person Stepo    schedule 04.03.2013


Ответы (6)


Здесь не нужно ничего усложнять:

$url  = 'www.shareit.me/matt';
$segs = explode('/', $url);
echo $segs[1]; // matt

Проверить, существует ли он, так же просто, как if ( !empty($segs[1]) ) {}

Предполагая, что вам нужно значение matt, а не только «путь», это будет работать со всем этим:

www.shareit.me/matt // matt
www.shareit.me/matt/photos
www.shareit.me/matt/photos/vacation/nebraska/cows/ // matt
www.shareit.me/matt/photos?vacation=mexico&gallery=donkeyshow // matt
www.shareit.me/matt/loves/cheese // matt

Если вы действительно хотите, чтобы люди знали, что Мэтт любит сыр, вам следует использовать parse_url() вместо этого:

parse_url('www.shareit.me/matt/loves/cheese', PHP_URL_PATH); // /matt/loves/cheese
person AlienWebguy    schedule 04.03.2013

вуаля, RTM: http://php.net/manual/en/function.parse-url.php

<?php

$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>

Приведенный выше пример выведет:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
/path
person michi    schedule 04.03.2013
comment
Это даст /matt, а не matt - person AlienWebguy; 04.03.2013

Вы можете использовать функцию parse_url, она вернет массив со всей информацией об URL. Что-то вроде этого, вероятно, то, что вы хотели бы:

echo explode('/', parse_url('http://www.shareit.me/matt')['path'])[1];
person Jordan Doyle    schedule 04.03.2013
comment
Это будет работать только в том случае, если путь имеет только один параметр. Что делать, если URL-адрес foo.com/matt/images? Я предполагаю, что он пытается получить имя пользователя или что-то из URL. - person AlienWebguy; 04.03.2013
comment
@AlienWebguy изменил мой ответ, чтобы разрешить несколько параметров. - person Jordan Doyle; 04.03.2013

Код:

$url = "http://www.shareit.me/matt";

$parts = Explode('/', $url);

$id = $parts[count($parts) - 1];

Демонстрация:

Кстати, Получение части строки .

person Stepo    schedule 04.03.2013

Если вы хотите получить URL-адрес, который используется для перехода к скрипту, вы используете переменную $_SERVER['REQUEST_URI']. В вашем случае он вернет это:

/matt 

Но вам нужно будет отфильтровать информацию, которая вам действительно нужна. Для этого вы можете использовать preg_match или альтернативный способ. Для получения дополнительной информации о переменной $_SERVER: см. эту страницу

Если вы хотите получить информацию о строке, содержащей URL-адрес, вы можете использовать

взорвать("/", $url);

person Tjoene    schedule 04.03.2013

вы можете использовать регулярное выражение с preg_match

preg_match("/.\/(.*)$/",$url,$matches);

чем проверять совпадения, если они содержат то, что вы хотите

person Abu Romaïssae    schedule 04.03.2013
comment
-1, это добавит лишние накладные расходы, плюс у вас есть встроенная функция, которая делает именно это: parse_url - person Diego Agulló; 04.03.2013
comment
да, я не знал об этой функции, но все же не могу понять минус, спасибо за комментарий :) - person Abu Romaïssae; 04.03.2013