Перед загрузкой файлов на сайт через соответствующее HTML-поле (тег «input» cтипом «file») часто необходимо очистить имя файла от кириллицы и специальных символов (обычно оставляют только латинские буквы, цифры и, возможно, некоторые заданные символы).
В данной статье я расскажу о способе преобразования имен файлов на PHP без применения регулярных выражений.
Для начала создадим функцию для перевода русских букв в латинские буквы. Назовем ее letter_trans. Функция принимает строку с именем файла и с помощью стандартной функции PHPstrtrпроизводит замену сначала просто букв, а затем их сочетаний.
function letter_trans($str)
{
$str = strtr($str,
«абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ»,
«abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE“);
return strtr($str, array( 'е'=>"yo», 'х'=>"h», 'ц'=>"ts», 'ч'=>"ch»,
'ш'=>"sh»,
'щ'=>"shch», 'ъ'=>'', 'ь'=>'',
'ю'=>"yu», 'я'=>"ya»,
'Е'=>"Yo», 'Х'=>"H», 'Ц'=>"Ts»,
'Ч'=>"Ch», 'Ш'=>"Sh»,
'Щ'=>"Shch», 'Ъ'=>'', 'Ь'=>'',
'Ю'=>"Yu», 'Я'=>"Ya»));
}
Далее необходимо удалить лишние символы, оставив только латинские буквы, цифры и некоторые заданные символы. Для этого создаем функцию trans. Сначала мы вызываем созданную ранее функцию letter_trans. Далее заменяем пробелы на знак подчеркивания. Затем из полученной строки выбираем только латинские буквы, цифры и некоторые символы, заданные в массиве $symbols.
function trans($str)
{
$symbols = array('0', '1', '2', '3',
'4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'y', 'z', '_', '.', '-');
$str = strtolower(letter_trans($str));
$str = str_replace(' ', '_', $str);
$str_result = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++)
{
$s = $str[$i];
if (in_array($s, $symbols))
$str_result.= $s;
}
return $str_result;
}