esc_url()
Очищает УРЛ для использования его в тексте, изменяет неправильные и удаляет опасные символы.
Эта функция в отличии от esc_url_raw() готовит строку к выводу на экран.
Всегда используйте эту функцию, когда нужно очистить УРЛы:
- в тексте.
- в атрибутах HTML тегов.
Что делает функция:
- Создает символы в виде HTML сущностей.
- Исправляет опечатки:
;//>>>:// - Меняет амперсанд
&и кавычку', на их сущности&,'. - Удаляет следующие символы:
a-z(case-insensitive)0-9- ~ + _ . ? # = ! & ; , / : % @ $ \ | * ' ( ) [ ]- байты в рендже
\x80-\xff(extended ASCII)
Избегайте УРЛов, в которых не используется нужный протокол, т.е. УРЛ должен начинаться с одного из: http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, telnet.
Основа для: sanitize_url(), esc_url_raw()
1 раз — 0.000052 сек (очень быстро) | 50000 раз — 0.31 сек (очень быстро) | PHP 7.1.2, WP 4.7.3
Хуки из функции
Возвращает
Строку. Очищенный УРЛ.
Использование
$url = esc_url( $url, $protocols, $_context );
- $url(строка) (обязательный)
- УРЛ, который нужно очистить.
- $protocols(массив)
- Массив принимаемых протоколов. По умолчанию это: http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, telnet.
По умолчанию: null - $_context(строка)
Как будет использоваться УРЛ. Может быть:
display- амперсанд ( & ) и кавычки ('), будут заменены на их сущности.''(пустая строка) - стандартная очистка.db- стандартная очистка.
По умолчанию: 'display'
Примеры
#1 Сравнение с urlencode()
-
urlencode()- кодирует преданную строку, чтобы её можно было использовать как часть URL (без домена). Если передать целиком URL, то он станет нерабочим. esc_url()- обрабатывает URL целиком (не ломает его), заботится о безопасном выводе URL на экран - удаляет или изменяет в URL некоторые символы (совсем не так как это делает urlencode()).
$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
#2 Демонстрация очистки URL
$url = "http;//example.com/link?var='some_&_\backslach"; echo esc_url( $url ); //> http://example.com/link?var='some_&_backslach $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) ""
#3 Относительный URL
echo esc_url( '/foo' ); //> /foo echo esc_url( '//github.com/wp_limit_login' ); //> //github.com/wp_limit_login // НО echo esc_url( 'foo' ); //> http://foo
Список изменений
| С версии 2.8.0 | Введена. |
| С версии 6.9.0 | Prepends https:// to the URL if it does not already contain a scheme and the first item in $protocols is 'https'. |