CoderCastrov logo
CoderCastrov
Парсер

Манипуляция с URL-адресами в PHP (простой способ)

Манипуляция с URL-адресами в PHP (простой способ)
просмотров
2 мин чтение
#Парсер

Я часто работаю с парсерами веб-страниц и, в этой сфере деятельности, мне часто требуется манипулировать 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 и дайте мне знать!