mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-26 22:50:29 +01:00
46 lines
1.4 KiB
PHP
46 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace Xentral\Components\Sanitizer\Helper;
|
|
|
|
use Xentral\Components\Sanitizer\Exception\InvalidArgumentException;
|
|
use Xentral\Components\Sanitizer\Exception\InvalidUrlException;
|
|
|
|
final class UriParser
|
|
{
|
|
/**
|
|
* @param string $url
|
|
*
|
|
* @throws InvalidArgumentException
|
|
* @throws InvalidUrlException
|
|
*
|
|
* @return UriDefinition
|
|
*/
|
|
public function parse($url)
|
|
{
|
|
if (!is_string($url) || empty($url)) {
|
|
throw new InvalidArgumentException('Url is invalid. Url can not be empty.');
|
|
}
|
|
|
|
$parts = @parse_url($url);
|
|
if ($parts === false) {
|
|
throw new InvalidUrlException(sprintf('Could not parse url: "%s"', $url));
|
|
}
|
|
|
|
$queryParams = [];
|
|
if (isset($parts['query'])) {
|
|
parse_str($parts['query'], $queryParams);
|
|
}
|
|
|
|
return new UriDefinition(
|
|
isset($parts['scheme']) ? $parts['scheme'] : null,
|
|
isset($parts['user']) ? $parts['user'] : null,
|
|
isset($parts['pass']) ? $parts['pass'] : null,
|
|
isset($parts['host']) ? $parts['host'] : null,
|
|
isset($parts['port']) ? (int)$parts['port'] : null,
|
|
isset($parts['path']) ? $parts['path'] : null,
|
|
is_array($queryParams) ? $queryParams : null,
|
|
isset($parts['fragment']) ? $parts['fragment'] : null
|
|
);
|
|
}
|
|
}
|