sanitize_text_field()

Функция sanitize_text_field() очищает переданную в неё строку следующим образом:

  1. Проверяет, является ли переданное значение числом или строкой, если это объект или массив – возвращает пустую строку.
  2. Удаляет некорректные для кодировки UTF-8 символы.
  3. Преобразует открывающий символ <, не являющийся частью HTML-теги в HTML-сущность &lt;.
  4. Преобразует символы переносов строки и табуляции \r, \n и \t в пробелы.
  5. Очищает пробелы в начале и конце строки php-функцией trim().
  6. Удаляем октеты (последовательность из двух букв со знаком процента перед ними), например такое встречается, если у нас присутствует кириллица в урл, пример ниже.

Это отличная функция для очистки пользовательского ввода, а именно – обычных текстовых полей <input type="text">, но обратите внимание, что она не предотвращает SQL-атаки (см. $wpdb->prepare), так что результат действия функции вы можете передавать только в другие функции WordPress, типо update_option(), но никак не напрямую в SQL-запросы. Подробнее о том, когда она нужна – в этом уроке.

sanitize_text_field( $str )
$str
(строка) Строка, которую нужно очистить.

Пример использования sanitize_text_field()

Тут я решил сделать один пример с различным вариантами использования функции.

// очищаем HTML-теги
$text = '<h2>Какой-то заголовок</h2>';
echo sanitize_text_field( $str ); // Какой-то заголовок
 
// очищаем переносы строк (а точнее заменяем пробелами)
$str = 'строка 1
строка 2';
echo sanitize_text_field( $str ); // строка 1 строка 2
 
// эммоджи
$str = 'Эмоджи никуда не исчезнут 🔥🦕🦖';
echo sanitize_text_field( $str ); // Эмоджи никуда не исчезнут 🔥🦕🦖
 
// передаём в функцию целое числовое значения
echo sanitize_text_field( 50 ); // строка 50
 
// как очищаются октеты и что это вообще
$str = 'https://misha.agency/' . urlencode( 'контакты' ); // https://misha.agency/%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D1%8B
echo sanitize_text_field( $str ); // https://misha.agency/
 
// массив
$array = array( 'author' => 'Миша', 'author_uri' => 'https://misha.agency' );
echo sanitize_text_field( $array ); // пустая строка
 
// json
$array = array( 'author' => 'Миша', 'author_uri' => 'https://misha.agency' );
$str = json_encode( $array ); // {"author":"\u041c\u0438\u0448\u0430","author_uri":"https:\/\/misha.agency"}
echo sanitize_text_field( $str ); // {"author":"\u041c\u0438\u0448\u0430","author_uri":"https:\/\/misha.agency"}
 
// также для массивов подойдёт функция array_map()
$array = array( 'author' => '<cite>Миша</cite>' );
print_r( array_map( 'sanitize_text_field', $array ) ); // Array( [author] => Миша )

Фильтр sanitize_text_field

Перед тем, как возвратить итоговое значение, функция применяет к нему фильтр sanitize_text_field, что позволяет нам добавить дополнительную очистку или наоборот удалить.

add_filter( 'sanitize_text_field', 'true_additional_sanitization' );
 
function true_additional_sanitization( $filtered, $str ) {
	// $str – оригинальная строка без очистки
	// $filtered - очищенное значение 
 
	// ... делаем что-то дополнительно
 
	return $filtered; // возвращаем результат
}

Миша

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

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.