<?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 ); } }