Функция sanitize_file_name()
используется в WordPress для очистки названий файлов перед их загрузкой, чтобы избежать проблем с несовместимыми символами на различных операционных системах. Она удаляет или заменяет недопустимые символы и пробелы, чтобы обеспечить корректное название файла.
sanitize_file_name( string $filename ): string
Эта функция принимает строку — название файла — и возвращает очищенное имя, в котором пробелы заменены на дефисы, а особые символы, недопустимые для имен файлов, удалены. Также она удаляет точки, тире и подчеркивания в начале и конце строки.
Параметры
$filename
(строка, обязательный): Название файла, которое нужно очистить.
Возвращаемое значение
- Возвращает строку — очищенное название файла.
Детали работы функции
Функция использует фильтры sanitize_file_name_chars
и sanitize_file_name
, что позволяет разработчикам изменять список удаляемых символов. Например, она может автоматически удалить такие символы, как [
, ]
, ,
, и другие знаки, требующие экранирования в командной строке.
Простой пример с базовым названием файла
<?php
$filename = 'example-[file].php';
$sanitized_filename = sanitize_file_name($filename);
echo $sanitized_filename; // Вывод: example-file.php
?>
В этом примере функция убирает скобки и заменяет пробелы (если бы они были) дефисом, возвращая example-file.php
.
Удаление пробелов и замена спецсимволов
<?php
$filename = 'my file name!@#$.jpg';
$sanitized_filename = sanitize_file_name($filename);
echo $sanitized_filename; // Вывод: my-file-name.jpg
?>
Здесь удаляются недопустимые символы, такие как !
, @
, #
, $
, а пробелы заменяются на дефисы.
Преобразование в нижний регистр
Чтобы автоматически конвертировать все названия файлов в нижний регистр, можно добавить следующий фильтр:
add_filter('sanitize_file_name', 'strtolower');
Универсальная очистка для всех файловых систем
Если необходимо обеспечить совместимость с ASCII, можно использовать дополнительный код:
add_filter('sanitize_file_name', 'wpdocs_sanitize_filename');
function wpdocs_sanitize_filename($filename) {
if ('ASCII' !== mb_detect_encoding($filename)) {
$filename = iconv(mb_detect_encoding($filename), 'ASCII//TRANSLIT', $filename);
$filename = sanitize_file_name($filename);
}
return $filename;
}
Этот код переводит название файла в ASCII, заменяя все неизвестные символы дефисами.
Заключение
Функция sanitize_file_name()
особенно полезна в случаях, когда пользователи загружают файлы с названиями, содержащими пробелы, специфические для языка символы или недопустимые знаки.