Функции проверки(валидация) данных в WordPress

ФункцииКомментариев нет

В этой статье мы поговорим о том какие функции PHP и встроенные в WordPress помогут нам произвести валидацию входящих и исходящих данных.

Сразу хочется отметить что все данные нужно проверять. Входящие данные — должны быть проверены как можно быстрее, а вот исходящие лучше проверять прямо перед выводом. При работе с данными лучше пользоваться функциями вордпресс, так как они самостоятельно проверяют и очищают данные(например функции работы с базой данных: $wpdb->update(), $wpdb->insert(), wp_update_post() или выводом на экран: the_title(), the_content()). Но даже с использованием встроенных функция wordpress, особенно если вы начинающий программист, лучше приучать себя к проверкам данных и делать их в обязательном порядке.

Функции для валидации данных

Далее я буду перечислять функции и коротко их описывать. Будут функции как PHP так и WordPress и каждая будет со своей пометкой([PHP] или [WordPress]). Сразу хочу сказать что данный список функций не претендует на пособие по валидации данных в php. Здесь будут перечислены основные функции php и wordpress, которые чаще всего используются.

 Числа

Основные положения:

  1. При проверки числа условием if или switch нужно использовать «===» и «!==» вместо «==» и «!=».  То есть сравнение проводить с учетом типа переменной.
  2. При проверке числовых значений в функции in_array( $val, $array, true) — обязательно используйте третий параметр равный true для сравнения значения массива с переменной, учитывая тип данных.

Преобразование чисел:

(int) $int или intval( $int )

$int — переменная которая будет преобразована.

[PHP] Приводит значение переменной $int к типу integer( ℤ = {…, -2, -1, 0, 1, 2, …}. ) — целому числу.


floatval( $float );

$float — переменная которая будет преобразована.

[PHP] Преобразует переменную в число с плавающей точкой(не целое число,  float)


absint( $int );

$int — переменная которая будет преобразована.

[WordPress] Преобразует значение переменной в положительное целое число(функция absint(-7), вернёт 7). Доступна с версии: с версии 2.5


Проверки на число:

is_int ( $var );

$var — проверяемое значение.

[PHP] Функция проверит является ли $var переменной целочисленного типа. Проверка строгая, значение «12»(строка) — не будет распознано как число.


is_numeric($element);

$element — проверяемое значение.

[PHP] Функция проверит является ли переменная числом или строкой, содержащей число.  Значение «12»(строка) — будет распознано как число.


is_float ( $var );

$var — проверяемое значение.

[PHP] Функция проверит является ли переменная числом с плавающей точкой. На целое число или строку — вернет false.


Дополнительно:

Проверка строки на содержания только цифр от 0 до 9:

Массивы

Основные положения:

  1. При проверке числовых значений в функции in_array( $val, $array, true) — обязательно используйте третий параметр равный true для сравнения значения массива с переменной, учитывая тип данных.
  2. При проверки на существования значений в массиве лучше использовать !empty вместо is_array(). Так как проверка if(is_array($array)) {…} — пройдет успешно с пустым массивом.

Преобразование массивов:

array_map( ‘absint’, $array );

absint — функция которая будет применена для каждого элемента массива.

$array — массив значений.

[PHP] Функция применяет к массиву $array функцию передаваемую первым значением, в примере это absint().


map_deep( $value, $callback );

$value — Массив, объект, строка, число, которые нужно обработать функцией указанной в $callback.

$callback — Функция которая будет обрабатывать значение.

[WordPress] Функция похожа на array_map, только может обрабатывать не только массивы но и объекты строки и числовые значения. Доступна с версии: с версии 4.4.0


Строки

Исходящие данные (вывод на экран):

esc_html( $text );

$text — тест(html) для преобразования(массив нельзя передавать).

[WordPress] Функция преобразует символы &, <, >, «, ‘ для вывода на экран(кодировкой, например &quot;). Так же функция пытается исправить символы в неправильной кодировке utf-8.


esc_html__( $text, $domain );

$text — тест(html) для преобразования(массив нельзя передавать).

$domain — (не обязательный) доменное имя (text domain), которое указывается для перевода строки на другие языки.

[WordPress] Работает аналогично функции esc_html( $text ) (описанной выше) но в отличии от нее есть возможность перевода строки.


esc_html_e( $text, $domain );

$text — тест(html) для преобразования(массив нельзя передавать).

$domain — (не обязательный) доменное имя (text domain), которое указывается для перевода строки на другие языки.

[WordPress] Работает аналогично функции esc_html( $text )  и esc_html__( $text, $domain )(описанной выше) но в отличии от них выводит строку на экран.


esc_textarea( $text );

$text — тест(html) для преобразования(массив нельзя передавать).

[WordPress] Функция подготавливает строку для вывода ее в поле textarea. Есть аналогичная функция в php — это htmlspecialchars();


sanitize_text_field( $text );

$text — тест(html) для преобразования(массив нельзя передавать).

[WordPress] Функция очищает строку от всего, оставляя только текст. Что именно чистит функция:

  1. Проверяет и справляет ошибки в кодировке utf-8
  2. Удаляет все теги
  3. Преобразует одиночный знак < в кодировку (например &quot;)
  4. Удаляет перенос слов на новую строку, табуляцию и невидимые пробелы
  5. Удаляет пробелы на конце строки
  6. Удаляет октеты %[a-f0-9]{2}

sanitize_html_class( $class, $fallback);

$class— класс(строка) для преобразования(массив нельзя передавать).

$fallback — (не обязательный) класс который будет подставлен если в результате обработки переменной $class получится пустая строка

[WordPress] Функция подготавливает строку для использовании ее в html атрибуте class. Удаляет не нужные функции. Что именно чистит функция:

  1. Удалит все октеты
  2. Удалит все символы не входящие в: A-Z, a-z, 0-9, _, — 

esc_attr( $text );

$text — тест(строка) для преобразования(массив нельзя передавать).

[WordPress] Функция преобразует символы < > & » ‘ для испрользования их в атрибутах тегов html.


esc_attr__( $text, $domain );

$text — тест(строка) для преобразования(массив нельзя передавать).

$domain — доменное имя (text domain), которое указывается для перевода строки на другие языки.

[WordPress] Функция аналог esc_attr( $text ); —  но в отличии от нее имеет возможность добавить домен который используется для перевода на другие языки.


esc_attr_e( $text, $domain );

$text — тест(строка) для преобразования(массив нельзя передавать).

$domain — доменное имя (text domain), которое указывается для перевода строки на другие языки.

[WordPress] Функция аналог esc_attr( $text ); и esc_attr__( $text, $domain );—  но в отличии от них выводит преобразованное значение на нужном языке на экран.


Входящие данные:

sanitize_title( $title, $fallback_title, $context );

$title — строка которую нужно преобразовать.

$fallback_title —  (не обязательный) slug по умолчанию, который будет использован если не указан $title.

$context — (не обязательный) контекст в котором нужно очищать строку. По умолчанию save.

[WordPress] Функция преобразует строку в slug(подходящую для url).


sanitize_user( $username, $strict );

$username — имя пользователя которое нужно очистить.

$strict — Если установить true, то разрешено к использованию будут только следующие символы: [a-zA-Z0-9 _*.-].

[WordPress] Функция очищает строку(логин пользователя), проверяя на допустимые значения(Удаляет: html теги, ноты, html сущности и другие символы не входящие в ASCII).


sanitize_file_name( $filename );

$filename — название файла которое нужно очистить.

[WordPress] Функция преобразует название файла в правильно(без пробелов и спец символов). Если более конкретно, то, она заменяет следующее: пробелы на _, несколько тире на одно, удаляет точки, тире, подчеркивание (. — _) на концах названия, и также удаляет различные символы: ? [ ] / \\ = <> : ; ‘ \ & $ # * ( ) | ~ ` ! { }


sanitize_key( $key );

$key — строка которая будет преобразована.

[WordPress] Функция преобразует строку в ключ. Ключ это строка содержащая следующие символы:  a-z0-9_- Буквы будут переведены в нижний регистр. Остальные символы будут удалены.


sanitize_mime_type( $mime_type );

$mime_type — строка, которая должна быть MIME типом. Например image/pjpeg, audio/x-ms-wma и т.д.

[WordPress] Функция очищает строку для соответствия ее MIME типу.


sanitize_option( $option, $value );

$option — название опции wordpress, на основании которой будет подобрана функции обработки строки.

$value — строка которая будет преобразована.

[WordPress] Функции производит очистку(обработку) спередаваемой строки $value используя функции которые преобразуют встроенную опцию вордпресс($option). То есть если вам нужно преобразовать строку по подобию как это будет сделано для почты администратора(пример: sanitize_option( ‘admin_email’, $value );  ). Полный список доступных опций вы можете посмотреть тут:

https://codex.wordpress.org/Function_Reference/sanitize_option


Email адрес

Проверка на email:

is_email( $email );

$email — строка которую проверят является она email адресом или нет.

[WordPress] Функция проверит является ли строка $email — адресом электронной почты(email). В результате удачной проверки, функция вернет true, в противном случае false.


Преобразование email:

sanitize_email( $email );

$email — строка которая будет преобразована, по email значение.

[WordPress] Функция удалит из строки символы, которые не должны встречаться в email адресах.


Дополнительно:

Проверка на email через регулярное выражение:

Валидация e-mail адреса, используя функцию filter_var()

Ссылки (url адреса)

Преобразование url:

esc_url( $url, $protocols, $_context );

$url — url который нужно очистить.

$protocols — Массив принимаемых протоколов. По умолчанию это: ‘http’, ‘https’, ‘ftp’, ‘ftps’, ‘mailto’, ‘news’, ‘irc’, ‘gopher’, ‘nntp’, ‘feed’, ‘telnet’.

$_context — Как будет использоваться url. По умолчанию display.

[WordPress] Функция очистит url строку и подготовит ее для вывода в html атрибутах или xml. Функция также проверит ссылку на безопасный(из списка $protocols) протокол.


esc_url_raw( $url, $protocols );

$url — url который нужно очистить.

$protocols — Массив принимаемых протоколов. По умолчанию это: ‘http’, ‘https’, ‘ftp’, ‘ftps’, ‘mailto’, ‘news’, ‘irc’, ‘gopher’, ‘nntp’, ‘feed’, ‘telnet’.

[WordPress] Функция очистит url строку, но в отличии от esc_url() — не подготовит ее для вывода на экран(использование в атрибутах будет не безопасно). Можно использовать при запросах в базу данных, редиректах и HTTP запросах.


Проверка на url:

filter_var($url,FILTER_VALIDATE_URL);

$url — строка для проверки является ли она url адресом или нет.

[PHP] Функция проверит является ли строка $url корректным url адресом. При использовании данной функции нужно быть внимательным, так как она не делает проверку на содержание HTTP-протокола(то есть не проверяет на наличие ssh:// или mailto:)


Дополнительно:

Проверим существует ли сайт на самом деле:

Проверим является строка правильным url адресом с помощью регулярного выражения:

 

HTML

wp_kses( $string, $allowed_html, $allowed_protocols );

$string — строка(html) который нужно очистить.

$allowed_html — Список допустимых HTML элементов(атрибутов).

  1. post — оставит теги допустимые для постов (глобальная переменная $allowedposttags)
  2. strip — вырежет все теги. Аналог функции PHP strip_tags()
  3. entities — HTML сущности, как &nbsp; (глобальная переменная $allowedentitynames)
  4. user_description, pre_user_description — тоже что и default, только еще разрешается атрибут rel для ссылок <a>.
  5. default или любая строка — список базовых допустимых тегов. Используется при очистки текста комментария: глобальная переменная $allowedtags.

Или массив:

$allowed_protocols — список допустимых протоколов (по умолчанию: http, https, ftp, mailto, news, irc, gopher, nntp, feed и telnet)

[WordPress] Функция очистит строку(html), оставляя в ней только то что вы укажите в параметрах $allowed_html и $allowed_protocols. Стоить заметить что фильтры wp_kses() — медленные. Их лучше использовать прямо перед записью в базу.


wp_kses_post( $text );

$text — строка которая будет очищена.

[WordPress] Функция очистит строку в соответствии с правами для публикации текущего пользователя.


wp_kses_data( $text );

$text — строка которая будет очищена. Строка должна быть не экранирована(если экранирована лучше использовать wp_filter_kses())

[WordPress] Функция очистит строку подобным образом как для комментариев вордпресс. То есть будет оставлено минимальное количество тегов.


wp_filter_kses( $text ); — то же самое что и wp_kses_data( $text ); только учитывает экранированные кавычки.


wp_rel_nofollow( $html );

$html — html контент в котором могут быть теги a (для которых нужно подставить атрибут rel=»nofollow»).

[WordPress] Функция которая добавит всем ссылка которые находятся в контенте $html атрибут rel=»nofollow».


wp_kses_allowed_html( $context );

$context — тип который определяет список допустимых тегов. Виды типов:

  1. post — оставит теги допустимые для постов (глобальная переменная $allowedposttags)
  2. strip — вырежет все теги. Аналог функции PHP strip_tags()
  3. entities — HTML сущности, как &nbsp; (глобальная переменная $allowedentitynames)
  4. user_description — базовый список тегов ($allowedtags) + тег <a rel=»»>.
  5. data или default — список базовых допустимых тегов. Используется при очистки текста комментария (глобальная переменная $allowedtags)

[WordPress] Функция которая получает список допустимых тегов для параметра указанного в $context.Результат работы функции wp_kses_allowed_html( $context ), то есть список тегов, можно использовать в функции wp_kses().


force_balance_tags( $text );

$text — строка(html) в которой нужно закрыть все не закрытые теги.

[WordPress] Функция исправит синтаксис(правильно написание тегов) а так же правильно закроет теги(по порядку) и закроет не закрытые теги. Функция используется перед выводом контента на экран, что бы верстка была правильной и без ошибок(не поехала в случае если тег не закрыт).


tag_escape( $tag_name );

$tag_name — название тега который нужно преобразовать.

[WordPress] Функция очистит $tag_name под правила написания тегов. Удаляет все символы кроме a-zA-Z0-9_:. Переводит строку в нижний регистр.


sanitize_html_class( $class, $fallback);

$class— класс(строка) для преобразования(массив нельзя передавать).

$fallback — (не обязательный) класс который будет подставлен если в результате обработки переменной $class получится пустая строка

[WordPress] Функция подготавливает строку для использовании ее в html атрибуте class. Удаляет не нужные функции. Что именно чистит функция:

  1. Удалит все октеты
  2. Удалит все символы не входящие в: A-Z, a-z, 0-9, _, — 

JavaScript

esc_js( $text );

$text — строка которая будет использована в javascript.

[WordPress] Функция подготавливает строку для использовании ее в javascript(экранирует кавычки, меняет символы (» <> &) на спецсимволы HTML и поправляет окончание строки). Пример использования:


База данных

$wpdb->prepare( $sql, $value1, $value2, … );

$sql — sql запрос в котором можно использовать переменные %s (строка), %d (число) и %f(число с плавающей точкой)

$value1, $value2 — переменные %s (строка), %d (число) и %f(число с плавающей точкой), которые были указаны в запросе  $sql.

[WordPress] Функция выполняет запрос(который указан в $sql , при этом берет на себя  проверку передаваемых в запросе переменных($value1, $value2).


esc_sql( $sql );

$sql — строка которая должна быть подготовлена для использования в sql запросе.

[WordPress] Функция подготовит значение переменной $sql для использования ее в запросе. Это функция как альтернатива $wpdb->prepare( $sql, $value1, $value2, … );


$wpdb->esc_like( $text );

$text — строка которая будет использованя в запросе в части LIKE.

[WordPress] Функция подготовит строку $text для использования ее в LIKE части SQL запроса.


 

 

Источники:

http://wp-kama.ru/id_6643/proverka-vhodyashhih-ishodyashhih-dannyh.html

https://codex.wordpress.org/Data_Validation

https://secure.php.net/


Будь первым кто прокомментирует статью.

Добавить комментарий

Войти с помощью: