Graby\Graby::validateUrl PHP Method

validateUrl() private method

Validate & clean the given url.
private validateUrl ( string $url ) : string
$url string
return string
    private function validateUrl($url)
    {
        // Check for feed URL
        $url = trim($url);
        if (strtolower(substr($url, 0, 7)) == 'feed://') {
            $url = 'http://' . substr($url, 7);
        }
        if (!preg_match('!^https?://.+!i', $url)) {
            $url = 'http://' . $url;
        }
        // explode url to convert accents
        $parsedUrl = parse_url($url);
        if (false === $parsedUrl) {
            throw new \Exception(sprintf('Url "%s" is not valid.', $url));
        }
        if (isset($parsedUrl['host']) && preg_match('/[\\x80-\\xff]/', $parsedUrl['host'])) {
            $parsedUrl['host'] = $this->punycode->encode($parsedUrl['host']);
        }
        if (isset($parsedUrl['path']) && preg_match('/[\\x80-\\xff]/', $parsedUrl['path'])) {
            $path = array();
            foreach (explode('/', $parsedUrl['path']) as $value) {
                $path[] = urlencode($value);
            }
            $parsedUrl['path'] = implode('/', $path);
        }
        // everything should be converted, rebuild the final url
        $url = $this->unparse_url($parsedUrl);
        if (false === filter_var($url, FILTER_VALIDATE_URL)) {
            throw new \Exception(sprintf('Url "%s" is not valid.', $url));
        }
        $url = filter_var($url, FILTER_SANITIZE_URL);
        if (false === $this->isUrlAllowed($url)) {
            throw new \Exception(sprintf('Url "%s" is not allowed to be parsed.', $url));
        }
        return $url;
    }