Функция подготавливает (очищает) переданную в неё строку как URL для редиректов, HTTP-запросов и запросов к базе данных.
Обратите внимание, что если вы хотите выводить URL на сайте или например использовать его в качестве HTML-атрибутов, то вам нужна другая функция – esc_url().
Как конкретно работает функция:
- Удаляет пробелы на концах.
- Заменяет пробелы внутри на символы
%20
. - Для всех протоколов кроме mailto удалит символы
%0d
,%0a
,%0D
,%0A
(подробнее, что это за символы). - Заменит
;//
на://
. - Если URL не содержит протокола, но при этом не является относительной ссылкой
/wordpress/esc_url.html
, URL-параметрами?myparam=yes
, якорем#primer
или php-файломesc_url.php
, то автоматически будет добавлен протокол http://. - Если указанный в URL протокол не поддерживается, то возвратит пустую строку.
- Применит фильтр clean_url в самом конце.
esc_url_raw( $url, $protocols = null )
Параметры
- $url
- (строка) Текст, который предположительно является урлом, который мы и должны очистить.
- $protocols
- (массив) Массив из поддерживаемых протоколов в урле (http,ftp и так далее). Если в переданном URL используется протокол, который не указан в этом массиве, то функция возвращает пустую строку. По умолчанию – значение функции
wp_allowed_protocols()
, которая возвращает массив:Array ( [0] => http [1] => https [2] => ftp [3] => ftps [4] => mailto [5] => news [6] => irc [7] => irc6 [8] => ircs [9] => gopher [10] => nntp [11] => feed [12] => telnet [13] => mms [14] => rtsp [15] => sms [16] => svn [17] => tel [18] => fax [19] => xmpp [20] => webcal [21] => urn )
Пример. Правильное и неправильное использование
В самом начале описания этой функции, я упомянул, что её нельзя использовать при выводе URL в качестве HTML-атрибутов, а использовать для HTTP-запросов, редиректов и так далее. Что же это означает?
Это означает прежде всего, что подобное использование функции небезопасно!
// Не надо так! Используем esc_url()! echo '<a href="' . esc_url_raw( $url ) . '">WordPress</a>';
Другое дело – создание HTTP-запросов.
$url = 'http://wordpress.org'; $response = wp_remote_get( esc_url_raw( $url ) ); // всё супер
Источник: Блог Миши Рудрастых