sanitize_html_class()
Подготавливает текст для использования его в html атрибуте class: удаляет все неподходящие символы.
Функция удаляет все октеты и все символы не входящие в значения: A-Z, a-z, 0-9, _, -.
Если в результате получится пустая строка, то функция вернет альтернативный класс, указанный во втором параметре $fallback.
Перед возвращением данных результат прогоняется через фильтр sanitize_html_class.
Обратите внимание, что функция обрабатывает только один класс. Т.е. если передать сразу 2 класса так: foo bar, пробел будет удален и получим: foobar.
Хуки из функции
Возвращает
Строку.
Использование
$sanitized = sanitize_html_class( $class, $fallback );
- $class(строка) (обязательный)
- Строка (название класса) которую нужно очистить.
- $fallback(строка)
- Значение, которое нужно вернуть, если оригинальное значение после очистки окажется пустой строкой.
По умолчанию: ''
Примеры
#1 Демонстрация работы функции
$text = 'Δοκιμαστικό κείμενο'; echo sanitize_html_class( $text ); // '' (пустая строка) $text = 'Some text'; echo sanitize_html_class( $text ); // Sometext $text = 'foo bar'; echo sanitize_html_class( $text ); // foobar $text = 'my-class'; echo sanitize_html_class( $text ); // my-class $text = 'Пример на английском - Example'; echo sanitize_html_class( $text ); // -Example
Но: Имена классов не должны начинаться с цифр, и эта функция не учитывает этого. Эта функция возвращает строку, начинающуюся с цифр, которые по определению W3 не являются допустимыми именами классов.
$text = '2foo'; echo sanitize_html_class( $text ); // 2foo
#2 Экранирование нескольких HTML классов
Ниже приведена функция, которая принимает массив классов или строку классов, разделенных разделителем:
function sanitize_html_classes( string|array $classes ): string {
if( ! is_array( $classes ) ){
$classes = explode( ' ', $classes );
}
$sanitized = '';
foreach( $classes as $class ){
$sanitized .= sanitize_html_class( $class ) . ' ';
}
return $sanitized;
}
Список изменений
| С версии 2.8.0 | Введена. |
Код sanitize_html_class() sanitize html class WP 7.0
function sanitize_html_class( $classname, $fallback = '' ) {
// Strip out any percent-encoded characters.
$sanitized = preg_replace( '|%[a-fA-F0-9][a-fA-F0-9]|', '', $classname );
// Limit to A-Z, a-z, 0-9, '_', '-'.
$sanitized = preg_replace( '/[^A-Za-z0-9_-]/', '', $sanitized );
if ( '' === $sanitized && $fallback ) {
return sanitize_html_class( $fallback );
}
/**
* Filters a sanitized HTML class string.
*
* @since 2.8.0
*
* @param string $sanitized The sanitized HTML class.
* @param string $classname HTML class before sanitization.
* @param string $fallback The fallback string.
*/
return apply_filters( 'sanitize_html_class', $sanitized, $classname, $fallback );
}