Как разбить URL-адрес на его составные части в PHP?

Регулярные выражения никогда не были одним из моих сильных сторон, и у меня есть я в тупике. В рамках проекта я хочу создать класс ссылок на PHP в PHP. Работа с mod_rewrite через Apache довольно проста для меня, и это отлично работает.

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

Например, это будет вызов функции в PHP:

<a href="<?= SEO::CreateLink('blog/post.php?post=123&category=5') ?>" title="Blog Post Title">Blog Post Title</a>

Затем функция CreateLink проанализировала переданную строку и CreateLink что-то вроде этого:

blog/blog-post-title

Заголовок URL-адреса сообщения в блоге уже хранится в базе данных. Я думаю, что лучший способ достичь этого – проанализировать динамическую строку URL, переданную в, и создать ассоциативный массив для анализа. Мой вопрос: каким будет регулярное выражение для URL-адреса и создать следующий ассоциативный массив в PHP?

 link_pieces['page_type'] = 'blog/post'; link_pieces['post'] = 123; link_pieces['category'] = 5; 

Где page_type является базовым каталогом и страницей запроса без расширения, а другие значения массива – это vars запросов?

Вы можете просто использовать parse_url и parse_str , нет необходимости в регулярных выражениях.

Используйте parse_url чтобы разбить URL на части:

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

Затем используйте parse_str чтобы разбить часть запроса.