wp_http_validate_url()
Checks if the specified URL can be used in an HTTP request, for example in the HTTP API.
-
The URL will not pass the check (will return false) if:
- The URL specifies an incorrect protocol (different from http/https): see the function wp_kses_bad_protocol()
- The provided URL could not be parsed using the PHP function parse_url().
- The domain name contains the character:
:#?[] - The URL specifies a user or password (user/pass).
- The domain in the specified URL differs from the current site domain (external URL) and the obtained IP of the external domain is internal (localhost). Internal URLs can be allowed through the filter: http_request_host_is_external.
-
The URL will pass the check (will return the specified URL) if all the above checks are passed and:
- No port is specified in the URL,
- or a port is specified and it is equal to one of: 80, 443, 8080,
- or the site domain is equal to the URL domain and the site domain port matches the port of the specified URL.
Uses: wp_kses_bad_protocol()
1 time — 0.003391 sec (very slow) | 50000 times — 7.47 sec (fast) | PHP 7.1.11, WP 4.9.5
Hooks from the function
Returns
String|false. The provided URL or false if the URL did not pass the check.
Usage
$url = wp_http_validate_url( $url );
- $url(string) (required)
- The URL to be checked and sanitized.
Examples
#1 Demonstration of checks for different URL variants
// internal URL
echo wp_http_validate_url('wp-kama.ru'); // false
echo wp_http_validate_url('https://wp-kama.ru'); // https://wp-kama.ru
// external URL
echo wp_http_validate_url('site.com'); // false
echo wp_http_validate_url('http://example.com'); // http://example.com
// URL with user and password
echo wp_http_validate_url('http://username:[email protected]/'); // false
// URL with port
echo wp_http_validate_url('http://example.com:80/'); // http://example.com:80/
echo wp_http_validate_url('http://example.com:123/'); // false #2 Another variant of validating a URL
If you’re validating a URL submitted by a user, I’d suggest instead using esc_url_raw(). Like so:
esc_url_raw( $url ) === $url
Changelog
| Since 3.5.2 | Introduced. |