esc_url_raw()

Функция подготавливает (очищает) переданную в неё строку как 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 ) ); // всё супер

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.