esc_url_raw() WP 2.8.0
Очищает URL для безопасного использования в запросе к БД, при редиректах и HTTP запросах. Не очищает для безопасного вывода на экран.
Не используйте эту функцию, если УРЛ выводится в HTML коде (на экран), используйте esc_url() - она заменяет HTML сущности - это защитит от XSS атак.
Работает на основе:
esc_url()
✈ 1 раз = 0.000071с = очень быстро | 50000 раз = 1.60с = быстро
Хуков нет.
Возвращает
Строку, очищенный URL. Вернет пустую строку, если в УРЛ указан неуказанный в $protocols
протокол.
Использование
esc_url_raw( $url, $protocols );
- $url(строка) (обязательный)
- УРЛ, который нужно очистить.
- $protocols(массив)
- Массив допустимых протоколов. Если не установлено, то:
http
,https
,ftp
,ftps
,mailto
,news
,irc
,gopher
,nntp
,feed
,telnet
.
По умолчанию: null
Примеры
#1 Демонстрация работы
$url = 'http://example.com?foo=<script>/some</script>'; echo esc_url_raw( $url ); // http://example.com?foo=script/some/script echo esc_url( $url ); // http://example.com?foo=script/some/script
#2 Очистка УРЛ перед использованием в запросе
$url = 'http://example.com'; $response = wp_remote_get( esc_url_raw( $url ) ); // не нужно очищать сущности if ( ! is_wp_error( $response ) ) { echo wp_remote_retrieve_body( $response ); }
#3 Неправильное использование
<!-- ОШИБКА! Нужно использовать esc_url()! --> <img src='<?php echo esc_url_raw( $url ); ?>' /> <a href='<?php echo esc_url_raw( $url ); ?>'>Example</a>
А можно второй пример пояснить? Получается, если мы применим esc_url, то сущности заменятся и ссылка станет нерабочей. Или я ошибаюсь?
К примеру, я вывожу на экран ссылку на ролик YouTube, там есть GET параметры, они ведь испортятся, ссылка станет нерабочей.
Нет не испортятся, конкретно в коде они изменятся, но ссылка будет рабочей!
Это ссылка для браузера создается он понимает кодированный вариант и декодирует его автоматом как бы.
Короче, у URL есть свои стандарты кодирования символов - эта функция этим и занимается, кодирует их для безопасного вывода на экран и чтобы браузер её правильно понял...