Получить часть URL-адреса в PHP не полностью работает

У меня есть этот код здесь:

$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
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Просто используйте 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 23.05.2019 17:16

Я отмечу ваш вопрос через несколько минут как полезный, потому что есть тайм-аут, который мне нужно подождать

Mr. Jo 23.05.2019 17:18

@Mr.Jo, это круто, я бы лично принял ответ Абры - так круто

treyBake 23.05.2019 17:19

Хорошо, я сделаю это :D

Mr. Jo 23.05.2019 17:22
Ответ принят как подходящий

Вы можете использовать функции, предназначенные для каталогов и/или 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-адресами, чтобы вам не приходилось обращаться с ними как со строками, не имеющими смысла, но неограниченными возможностями.

Можете ли вы объяснить, почему это работает? Я пробовал это, и это работает, но я не уверен, как это сделать. Было бы здорово это понять :)

Mr. Jo 23.05.2019 17:22

Как следует из имен функций, вы получаете каталог, а затем его базовое имя (последнее). Отредактировано для последнего, так как у него может быть имя файла.

AbraCadaver 23.05.2019 17:24

Возникла проблема с функцией. Есть идеи, почему? Я напишу это в своем вопросе

Mr. Jo 23.05.2019 19:14

В зависимости от косой черты в конце, вам может быть лучше использовать echo basename(parse_url($url, PHP_URL_PATH)); Я не уверен в вариативности, поэтому вам нужно протестировать возможные URL-адреса.

AbraCadaver 23.05.2019 19:36

Другие вопросы по теме