public static function url($url) {
		if (
			is_array($url)
			|| (is_string($url) && (preg_match('@^' . implode('|', Common::$uriSchemes) . ':@i', $url) || preg_match('@^#@i', $url)))
		) {
			return $url;
		}

		// Reset current language that gets changed by `I18n.I18nRoute::parse()`.
		$reset = Configure::check('Config.language') && $lang = Configure::read('Config.language');
		$parsed = Router::parse($url);
		if ($reset) Configure::write('Config.language', $lang);

		if ($parsed === false) {
			return $url;
		}

		if (!empty($parsed['pass'])) {
			$parsed = array_merge($parsed, $parsed['pass']);
			unset($parsed['pass']);
		}

		if (!empty($parsed['named'])) {
			foreach ($parsed['named'] as $param => $val) {
				$parsed[$param] = $val;
			}
			unset($parsed['named']);
		}

		if (array_key_exists('lang', $parsed) && strpos($url, $parsed['lang']) !== 1) {
			unset($parsed['lang']);
		}

		return $parsed;
	}