Функция sanitize_url() — Оптимизация URL-адресов в WordPress

Функция 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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *