# PHP пакет для управления URI

Пакет HttpSoft\Uri реализует Psr\Http\Message\UriInterface и нормализует URI в соответствии со спецификацией RFC 3986. В данный функционал входит: разбор, валидация и моделирование URI, а также впоследствии удобное манипулирование URI целиком и его частями отдельно.

Для этого пакета требуется PHP версии 7.4 или более поздней.

Установка пакета:

composer require httpsoft/http-uri

Исходный код на GitHub

# API

# Использование

use HttpSoft\Uri\Uri;
use HttpSoft\Uri\UriFactory;

$uri = new Uri('https://example.com/path/to/action?key1=value&key2=значение');
// или
$uri = UriFactory::create('https://example.com/path/to/action?key1=value&key2=значение');
// или
$factory = new UriFactory();
$uri = $factory->createUri('https://example.com/path/to/action?key1=value&key2=значение');

$uri->getScheme(); // 'https'
$uri->getHost(); // 'example.com'

$uri->getPath(); // '/path/to/action'
$uriWithNewPath = $uri->withPath('new/path');
$uriWithNewPath->getPath(); // 'new/path'
$uri->getPath(); // '/path/to/action'

$uri->getQuery(); // 'key1=value&key2=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5'
$uri->getRawQuery(); // 'key1=value&key2=значение'

$uri->get(); // 'https://example.com/path/to/action?key1=value&key2=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5'
// эквивалентно:
(string) $uri; // echo $uri;
// незакодированная:
$uri->raw(); // 'https://example.com/path/to/action?key1=value&key2=значение'

Подробное описание использования HttpSoft\Uri\Uri смотрите здесь.

HttpSoft\Uri\UriNormalizer может использоваться самостоятельно:

use HttpSoft\Uri\UriNormalizer;

$normalizer = new UriNormalizer();

$uriData = $normalizer->normalize('https://example.com/путь');
$uriData->getScheme(); // 'https'
$uriData->getHost(); // 'example.com'
$uriData->getPath(); // '/%D0%BF%D1%83%D1%82%D1%8C'
(string) $uriData; // 'https://example.com/%D0%BF%D1%83%D1%82%D1%8C'

$uriRawData = $normalizer->normalize('https://example.com/путь', true);
$uriData->getScheme(); // 'https'
$uriData->getHost(); // 'example.com'
$uriData->getPath(); // '/путь'
(string) $uriData; // 'https://example.com/путь'

Подробное описание использования HttpSoft\Uri\UriNormalizer смотрите здесь.