Функция sanitize_url() — Оптимизация URL-адресов в WordPress
Функция sanitize_url()
используется для очистки URL-адресов перед их сохранением в базе данных или для использования в редиректах. Это простая, но важная функция, особенно для безопасности вашего сайта.
Как работает sanitize_url()
Функция очищает URL-адрес с помощью другой функции esc_url()
. Она удаляет все недопустимые символы и гарантирует, что URL-адрес соответствует стандартам. В результате вы получаете безопасный и корректный URL.
Время выполнения
- Выполнение один раз: 0.0000241 секунд (очень быстро)
- Выполнение 50000 раз: 0.12 секунд (по-прежнему быстро)
Поддерживаемые версии
- PHP: 7.4.33
- WordPress: 6.2
Возврат значений
Функция возвращает строку — очищенный URL-адрес после выполнения esc_url()
, который имеет контекст 'db' (для базы данных).
Как использовать sanitize_url
Синтаксис функции
sanitize_url( $url, $protocols );
$url
(string) (обязательно) — URL-адрес для очистки.$protocols
(array[string]) — массив допустимых протоколов. По умолчанию используется значение функцииwp_allowed_protocols()
.
Примеры использования
Вот несколько примеров, которые помогут вам понять, как работает sanitize_url()
:
Пример 1: Очистка основных URL
var_dump(sanitize_url('www.example.com')); // http://www.example.com
var_dump(sanitize_url('example.com')); // http://example.com
var_dump(sanitize_url('https://example.com/foo')); // https://example.com/foo
var_dump(sanitize_url('https://example.com/foo-%2F-M')); // https://example.com/foo-%2F-M
var_dump(sanitize_url('/foo')); // /foo
var_dump(sanitize_url('')); // string(0) ""
var_dump(sanitize_url(false)); // string(0) ""
var_dump(sanitize_url(null)); // string(0) ""
var_dump(sanitize_url(true)); // string(8) "http://1"
Пример 2: Очистка URL для использования в заголовках
Вот как можно использовать sanitize_url()
для создания заголовков:
$url = get_rest_url();
header(sprintf('Link: <%s>; rel="https://api.w.org/"', sanitize_url($url)), false);
Другой пример:
$url = rest_url(rest_get_queried_resource_route());
header(sprintf('Link: <%s>; rel="alternate"; type="application/json"', sanitize_url($url)), false);
Пример 3: Фильтрация протоколов
Вы можете использовать sanitize_url()
для фильтрации URL по допустимым протоколам. Например, чтобы разрешить только http
и https
:
// Ссылка на ресурс FTP
$url = 'ftp://ftp.cdrom.com/pub/music/songs/1996';
$new_url = sanitize_url($url, ['http', 'https']); // > пустая строка
// Обычная ссылка на сайт по протоколу HTTPS
$url = 'https://site.example/projects/';
$new_url = sanitize_url($url, ['http', 'https']); // > https://site.example/projects/
Пример 4: Очистка URL перед сохранением
Если вы хотите очистить URL перед его сохранением в базе данных, можете сделать это так:
$user = new stdClass();
if (isset($_POST['url'])) {
$user->user_url = sanitize_url($_POST['url']);
}
$user_id = wp_insert_user($user);
Примечания
- Функция
sanitize_url()
является частью механизма безопасности WordPress и используется для предотвращения возможных уязвимостей при обработке пользовательских данных.
Изменения в функции
- Версия 2.3.1 — Функция была введена.
- Версия 2.8.0 — Функция была помечена как устаревшая в пользу
esc_url_raw()
. - Версия 5.9.0 — Функция была восстановлена.
Код функции sanitize_url
Вот код, который реализует функцию sanitize_url()
:
function sanitize_url( $url, $protocols = null ) {
return esc_url( $url, $protocols, 'db' );
}
Связанные функции
Функция sanitize_url()
относится к ра��делу очистки данных и используется в сочетании с другими функциями, такими как:
sanitize_email()
sanitize_file_name()
sanitize_text_field()
sanitize_title()
Эти функции также помогают поддерживать безопасность и корректность данных на сайте WordPress.