This package is deprecated Please consider using an stable alternative for any production code.

URI Formatter

The Formatter class helps you format your URI according to your output.


This main method __invoke expects an object implementing one of the following interface:

and returns a string representation of the submitted object according to the settings you gave it using the remaining methods.

The returned string MAY no longer be a valid URI


By default the formatter encode each URI component using RFC3986 rules. You can change the component encoding algorithm by specifying one of the predefined constant:


If you want to generate an URI string compatible with HTML rules you need for instance to convert the & to its HTML entity &. This setter enables you to change the query separator in the return URI string.

preserveQuery and preserveFragment

By default PSR-7 UriInterface does not preserve query and fragment delimiters in the string representation. If you want to keep them you need to specify this behaviour to the Formatter object. By default, the Formatter does not keep them too.



use League\Uri\Formatter;
use Zend\Diactoros\Uri as DiactorosUri;

$formatter = new Formatter();

$uri = new DiactorosUri('');
echo $formatter($uri);
//displays 'https://рф.ru:81?foo=ba r&amp;baz=bar#'

Function alias

available since version 1.1.0


function League\Uri\uri_to_rfc3986(mixed $uri): string
function League\Uri\uri_to_rfc3987(mixed $uri): string

These functions convert any The PSR-7 UriInterface or League\Interfaces\Uri implementing object into an URI string encoded in RFC3986 or RFC3987.
Uri\uri_to_rfc3986 and Uri\uri_to_rfc3987 always preserve query and fragment presence.


use Zend\Diactoros\Uri as DiactorosUri;
use function League\Uri\uri_to_rfc3986;
use function League\Uri\uri_to_rfc3987;

$uri = new DiactorosUri('тестовый_путь/');

echo uri_to_rfc3986($uri);
// displays ''

echo uri_to_rfc3987($uri);
// displays 'http://bébé.be/toto/тестовый_путь/',