$scheme, 'user' => $user, 'pass' => $pass, 'host' => $host, 'port' => $port, 'path' => $path, 'query' => $query ]; } /** * UTF-8 aware parse_url() implementation. * * @param string $url * @return array * @throws InvalidArgumentException */ public static function parseUrl($url) { if (!is_string($url)) { throw new InvalidArgumentException('URL must be a string'); } $encodedUrl = preg_replace_callback( '%[^:/@?&=#]+%u', static function ($matches) { return rawurlencode($matches[0]); }, $url ); $parts = is_string($encodedUrl) ? parse_url($encodedUrl) : false; if ($parts === false) { throw new InvalidArgumentException("Malformed URL: {$url}"); } return $parts; } /** * Parse query string and return it as an array. * * @param string $query * @return mixed */ public static function parseQuery($query) { parse_str($query, $params); return $params; } /** * Build query string from variables. * * @param array $params * @return string */ public static function buildQuery(array $params) { if (!$params) { return ''; } $separator = ini_get('arg_separator.output') ?: '&'; return http_build_query($params, '', $separator, PHP_QUERY_RFC3986); } }