esc_url()
Cleans a URL for use in text, fixes incorrect and removes unsafe characters.
This function, unlike esc_url_raw(), prepares the string for output to the screen.
Always use this function when you need to sanitize URLs:
- in text.
- in HTML tag attributes.
What the function does:
- Creates characters as HTML entities.
- Fixes typos:
;//>>>:// - Replaces ampersand
&and single quote'with their entities&,'. - Removes the following characters:
a-z(case-insensitive)0-9- ~ + _ . ? # = ! & ; , / : % @ $ \ | * ' ( ) [ ]- bytes in the range
\x80-\xff(extended ASCII)
Avoid URLs that do not use an appropriate protocol, i.e. the URL should start with one of: http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, telnet.
Used By: sanitize_url(), esc_url_raw()
1 time — 0.000052 sec (very fast) | 50000 times — 0.31 sec (very fast) | PHP 7.1.2, WP 4.7.3
Hooks from the function
Returns
String. Cleaned URL.
Usage
$url = esc_url( $url, $protocols, $_context );
- $url(string) (required)
- The URL to be cleaned.
- $protocols(array)
- Array of accepted protocols. By default: http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, telnet.
Default: null - $_context(string)
How the URL will be used. Can be:
display- ampersand ( & ) and single quotes (') will be replaced with their entities.''(empty string) - standard sanitization.db- standard sanitization.
Default: 'display'
Examples
#1 Basic Example
$url = "http;//example.com/link?var='some&"; echo esc_url( $url ); //> http://example.com/link?var='some& $url = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAD///////neHiwAAAAF3RST/+8RwZ=='; echo esc_url( $url ); //> '' echo esc_url( '#some' ); //> #some var_dump( esc_url( '' ) ); // string(0) "" var_dump( esc_url( false ) ); // string(0) "" var_dump( esc_url( null ) ); // string(0) ""
#2 Relative URL
echo esc_url( '/foo' ); //> /foo
#3 Comparison with urlencode()
-
urlencode()- encodes the passed string so that it can be used as part of the URL (without the domain). If you pass the whole URL, it becomes unusable. esc_url()- handles the whole URL (does not break it), takes care of the safe display of the URL - it removes or changes some characters in the URL (not like urlencode() does).
$url = "http://example.com/моя ссылка?var='some&"; echo esc_url( $url ); // http://example.com/моя%20ссылка?var='some& echo urlencode( $url ); // http%3A%2F%2Fexample.com%2F%D0%BC%D0%BE%D1%8F+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%3Fvar%3D%27some%26
Changelog
| Since 2.8.0 | Introduced. |
| Since 6.9.0 | Prepends https:// to the URL if it does not already contain a scheme and the first item in $protocols is 'https'. |