У меня есть этот код здесь:
$url = 'https://www.my-page.de/account/show/4913';
echo substr( $url, strrpos( $url, '/' ) + 1 );
Это возвращает мне необходимый идентификатор:
4913
Теперь начинается проблема. В некоторых случаях URL-адрес выглядит так:
$url = 'https://www.my-page.de/account/show/4913/';
$url = 'https://www.my-page.de/account/show/4913/?conversationId=xxx';
Это означает, что мой код больше не работает. Итак, есть ли способ быть на 100% уверенным, что я всегда получаю свой идентификатор из URL-адреса? Идентификатор всегда находится в одной и той же позиции с самого начала, но конец может быть другим.
Обновлять
Когда у меня есть этот код, я больше не получаю последнюю часть. Любая идея, почему и как это исправить?:
$url = 'https://my-page.de/account/show/4913/';
$id = basename( dirname( $url ) );
Я просто хочу быть уверен, что это работает в любой ситуации. В этом случае выбранная часть:
show






Просто используйте explode(), чтобы превратить его в массив, затем получите 5-й элемент, чтобы получить идентификатор:
<?php
$url = 'https://www.my-page.de/account/show/4913/?conversationId=xxx&trey=trey';
$arr = explode('/', $url);
$id = $arr[5];
echo '<pre>'. print_r($id, 1) .'</pre>';
тогда не имеет значения, сколько есть параметров запроса, они всегда будут последними
ссылки:
https://www.php.net/manual/en/function.explode.php
Я отмечу ваш вопрос через несколько минут как полезный, потому что есть тайм-аут, который мне нужно подождать
@Mr.Jo, это круто, я бы лично принял ответ Абры - так круто
Хорошо, я сделаю это :D
Вы можете использовать функции, предназначенные для каталогов и/или URL-адресов:
echo basename(dirname($url));
//or
echo basename(pathinfo($url, PATHINFO_DIRNAME));
//or
echo basename(parse_url($url, PHP_URL_PATH));
Последний может вернуть имя файла, если у вас есть https://www.my-page.de/account/show/4913/index.php, поэтому вы хотели бы использовать:
echo basename(dirname(parse_url($url, PHP_URL_PATH)));
Много возможностей в зависимости от того, что вам нужно. Дело в том, что существуют специальные функции для работы с каталогами, именами файлов и URL-адресами, чтобы вам не приходилось обращаться с ними как со строками, не имеющими смысла, но неограниченными возможностями.
Можете ли вы объяснить, почему это работает? Я пробовал это, и это работает, но я не уверен, как это сделать. Было бы здорово это понять :)
Как следует из имен функций, вы получаете каталог, а затем его базовое имя (последнее). Отредактировано для последнего, так как у него может быть имя файла.
Возникла проблема с функцией. Есть идеи, почему? Я напишу это в своем вопросе
В зависимости от косой черты в конце, вам может быть лучше использовать echo basename(parse_url($url, PHP_URL_PATH)); Я не уверен в вариативности, поэтому вам нужно протестировать возможные URL-адреса.
О нет, я совсем забыл об этом. Вот и получилось, большое спасибо!