Функция sanitize_text_field()
очищает переданную в неё строку следующим образом:
- Проверяет, является ли переданное значение числом или строкой, если это объект или массив – возвращает пустую строку.
- Удаляет некорректные для кодировки UTF-8 символы.
- Преобразует открывающий символ
<
, не являющийся частью HTML-теги в HTML-сущность<
. - Преобразует символы переносов строки и табуляции
r
,n
иt
в пробелы. - Очищает пробелы в начале и конце строки php-функцией
trim()
. - Удаляем октеты (последовательность из двух букв со знаком процента перед ними), например такое встречается, если у нас присутствует кириллица в урл, пример ниже.
Это отличная функция для очистки пользовательского ввода, а именно – обычных текстовых полей <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":"u041cu0438u0448u0430","author_uri":"https://misha.agency"} echo sanitize_text_field( $str ); // {"author":"u041cu0438u0448u0430","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; // возвращаем результат }
Источник: Блог Миши Рудрастых