Манипуляция с URL-адресами в PHP (простой способ)
Table Of Content
Я часто работаю с парсерами веб-страниц и, в этой сфере деятельности, мне часто требуется манипулировать URL-адресами.
Поэтому я написал небольшой класс на PHP, который позволяет мне делать это очень легко и удобно (если можно так сказать).
Вы можете установить его с помощью composer:
composer require filippo-toso/uri
Вы можете создать экземпляр класса URI с помощью статического метода make() или через его конструктор:
use FilippoToso\URI\URI;
$url = 'http://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com#fragment';
$uri = URI::make($url);
// или
$uri = new URI($url);
Вы также можете передать другие необязательные параметры, которые будут использоваться при создании строки запроса URL-адреса. Проверьте исходный код для получения более подробной информации.
После создания экземпляра класса вы можете использовать его удобный API для манипуляции с URL-адресом по вашему усмотрению.
Например, давайте изменим схему и домен:
use FilippoToso\URI\URI;
$url = 'http://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com';
$newUrl = URI::make($url)
->scheme('https')
->domain('test.com')
->url();
Вы можете вызывать следующие методы для получения/установки относительных частей URL-адреса: scheme(), user(), pass(), host(), port(), path(), query() и fragment().
Например, давайте получим домен:
use FilippoToso\URI\URI;
$url = 'http://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com';
$domain = URI::make($url)
->domain();
Экземпляр класса можно привести к строке, чтобы получить весь URL-адрес, или вы можете использовать метод url(), как показано выше.
Вы также можете получить неизмененный URL-адрес с помощью метода original().
Более сложное использование
Теперь давайте сделаем что-то более сложное, например, изменим URL с помощью относительного пути.
use FilippoToso\URI\URI;$url = 'http://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com';$relativeUrl = '../../hello.php';$newUrl = URI::make($url)
->relative($relativeUrl)
->url();
Параметр, переданный методу relative(), может быть полным URL (в этом случае весь URL будет заменен на новый), абсолютным путем или относительным путем. Он также может включать строку запроса и фрагмент.
Вы также можете изменить только расширение файла с помощью метода extension() или заменить строку запроса с помощью метода params() (он принимает массив параметров в качестве входных данных) или query() (он принимает строку в качестве входных данных).
Манипуляция с параметрами запроса
Говоря о манипуляции с параметрами запроса, существуют и другие полезные методы для этого. Например, вы можете использовать:
- add() для добавления параметра
- remove() для удаления параметра
- set() для замены значения параметра
- get() для получения значения параметра
Все эти методы принимают точечную нотацию в качестве имени ключа. Например, чтобы изменить параметр, такой как _$GET[‘post’][‘content’][‘html’], вы будете использовать точечную нотацию post.content.html
Говоря о методе remove(), вместо ключа вы можете передать обратный вызов для удаления нескольких элементов за один раз. Например, вот код для удаления всех параметров utm*_, используемых для отслеживания кампаний в Google Analytics:
$url = 'https://www.example.com/?utm_source=summer-mailer&utm_medium=email&utm_campaign=summer-sale';$newUrl = URI::make($url)
->remove(function ($key, $value) {
return (bool)preg_match('#^utm_#si', $key);
})->url();
Вот и все, приступайте к изменению URL-адресов!
Постскриптум Если вам нужна манипуляция с URL, которую я не упомянул, пожалуйста, откройте issue на GitHub и дайте мне знать!