Пока готового решение нет!Все изменения и исправления производятся в самом движке Joomla
/libraries/joomla/filesystem/file.php
Находим ст. 50-60:
/**
* Makes file name safe to use
*
* @param string $file The name of the file [not full path]
* @return string The sanitised string
* @since 1.5
*/
function makeSafe($file) {
$regex = array('#(\.){2,}#', '#[^A-Za-z0-9\.\_\- ]#', '#^\.#');
return preg_replace($regex, '', $file);
}
Здесь для J1.5 от ChaosHead - код не доделан
function makeSafe($file) {
// $regex = array('#(\.){2,}#', '#[^A-Za-z0-9\.\_\- ]#', '#^\.#');
// return preg_replace($regex, '', $file);
$gost299 = array(
"Рђ"=>"A","Р‘"=>"B","Р’"=>"V","Р“"=>"G","Р”"=>"D",
"Р•"=>"E","РЃ"=>"JO","Р–"=>"ZH",
"Р—"=>"Z","Р˜"=>"I","Р™"=>"J","Рљ"=>"K","Р›"=>"L",
"Рњ"=>"M","Рќ"=>"N","Рћ"=>"O","Рџ"=>"P","Р "=>"R",
"РЎ"=>"S","Рў"=>"T","РЈ"=>"U","Р¤"=>"F","РҐ"=>"H",
"Р¦"=>"C","Р§"=>"CH","РЁ"=>"SH","Р©"=>"SHH","РЄ"=>"",
"Р«"=>"Y","Р¬"=>"","Р"=>"JE","Р®"=>"YU","РЇ"=>"YA",
"Р°"=>"a","Р±"=>"b","РІ"=>"v","Рі"=>"g","Рґ"=>"d",
"Рµ"=>"e","С‘"=>"jo","Р¶"=>"zh",
"Р·"=>"z","Рё"=>"i","Р№"=>"j","Рє"=>"k","Р»"=>"l",
"Рј"=>"m","РЅ"=>"n","Рѕ"=>"o","Рї"=>"p","СЂ"=>"r",
"СЃ"=>"s","С‚"=>"t","Сѓ"=>"u","С„"=>"f","С…"=>"h",
"С†"=>"c","С‡"=>"ch","С?"=>"sh","С‰"=>"shh","СЉ"=>"",
"С‹"=>"y","СЊ"=>"","СЌ"=>"je","СЋ"=>"yu","СЏ"=>"ya"," "=>"-"
);
$res = trim($file);
$res = strtr($res, $gost299);
$res = preg_replace(array('/\s+/','/[\$\&\+\,\/\:\;\=\?\@\'\"\<\>\#\%\{\}\|\\\^\~\[\]\`\.]/'), array('-',''), $res);
$res = str_replace ('-', ' ', $res);
$res = trim (strtolower ($res));
$res = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-','-'), $res);
return $res;
}
Не удалось загрузить 'tam-gdejpg' файл: Вы должны использовать разрешённые расширения файлов (для изображения: jpg, jpeg, gif, png и другие файлы: txt, rtf, pdf, zip, tar.gz, tgz, tar.bz2).
Не удалось загрузить 'fajlzip' файл: Вы должны использовать разрешённые расширения файлов (для изображения: jpg, jpeg, gif, png и другие файлы: txt, rtf, pdf, zip, tar.gz, tgz, tar.bz2).
Для J1.7 от AlexSmok - вроде работает
public static function makeSafe($file)
{
//$regex = array('#(.){2,}#', '#[^A-Za-z0-9._- ]#', '#^.#');
//return preg_replace($regex, '', $file);
$gost = array(
"╨Р"=>"A","╨С"=>"B","╨Т"=>"V","╨У"=>"G","╨Ф"=>"D",
"╨Х"=>"E","╨Б"=>"JO","╨Ц"=>"ZH",
"╨Ч"=>"Z","╨Ш"=>"I","╨Щ"=>"J","╨Ъ"=>"K","╨Ы"=>"L",
"╨Ь"=>"M","╨Э"=>"N","╨Ю"=>"O","╨Я"=>"P","╨а"=>"R",
"╨б"=>"S","╨в"=>"T","╨г"=>"U","╨д"=>"F","╨е"=>"H",
"╨ж"=>"C","╨з"=>"CH","╨и"=>"SH","╨й"=>"SHH","╨к"=>"",
"╨л"=>"Y","╨м"=>"","╨н"=>"JE","╨о"=>"YU","╨п"=>"YA",
"╨░"=>"a","╨▒"=>"b","╨▓"=>"v","╨│"=>"g","╨┤"=>"d",
"╨╡"=>"e","╤С"=>"jo","╨╢"=>"zh",
"╨╖"=>"z","╨╕"=>"i","╨╣"=>"j","╨║"=>"k","╨╗"=>"l",
"╨╝"=>"m","╨╜"=>"n","╨╛"=>"o","╨┐"=>"p","╤А"=>"r",
"╤Б"=>"s","╤В"=>"t","╤Г"=>"u","╤Д"=>"f","╤Е"=>"h",
"╤Ж"=>"c","╤З"=>"ch","╤И"=>"sh","╤Й"=>"shh","╤К"=>"",
"╤Л"=>"y","╤М"=>"","╤Н"=>"je","╤О"=>"yu","╤П"=>"ya"," "=>"-"
);
$res = trim($file);
$res = strtr($res, $gost);
$res = preg_replace(array('/s+/','/[$&+,/:;=?@'"<>#%{}|\^~[]`]/'), array('-',''), $res);
$res = str_replace ('-', ' ', $res);
$res = trim (strtolower ($res));
$res = preg_replace('#(.){2,}#','.', $res);
return $res;
}
Есть ещё вариант от pawa - этот вариант точно не работает)))
function makeSafe($file) {
- $regex = array('#(\.){2,}#', '#[^A-Za-z0-9\.\_\- ]#', '#^\.#');
- return preg_replace($regex, '', $file);
+ $res = preg_replace('#(\.){2,}#','.', $file);
+ $res = preg_replace('#^\.#','', $res);
+ $res = preg_replace('#[^A-Za-z0-9\.\_\- ]#','-', $res);
+ return $res;
}
Мой вариант, но есть проблемы, все буквы не делает строчными, то есть оставляет заглавные буквы не переводит их в строчные.
function makeSafe($file) {
$gost = array(
"Рђ"=>"A","Р‘"=>"B","Р’"=>"V","Р“"=>"G","Р”"=>"D",
"Р•"=>"E","РЃ"=>"JO","Р–"=>"ZH",
"Р—"=>"Z","Р˜"=>"I","Р™"=>"J","Рљ"=>"K","Р›"=>"L",
"Рњ"=>"M","Рќ"=>"N","Рћ"=>"O","Рџ"=>"P","Р "=>"R",
"РЎ"=>"S","Рў"=>"T","РЈ"=>"U","Р¤"=>"F","РҐ"=>"H",
"Р¦"=>"C","Р§"=>"CH","РЁ"=>"SH","Р©"=>"SHH","РЄ"=>"",
"Р«"=>"Y","Р¬"=>"","Р"=>"JE","Р®"=>"YU","РЇ"=>"YA",
"Р°"=>"a","Р±"=>"b","РІ"=>"v","Рі"=>"g","Рґ"=>"d",
"Рµ"=>"e","С‘"=>"jo","Р¶"=>"zh",
"Р·"=>"z","Рё"=>"i","Р№"=>"j","Рє"=>"k","Р»"=>"l",
"Рј"=>"m","РЅ"=>"n","Рѕ"=>"o","Рї"=>"p","СЂ"=>"r",
"СЃ"=>"s","С‚"=>"t","Сѓ"=>"u","С„"=>"f","С…"=>"h",
"С†"=>"c","С‡"=>"ch","С?"=>"sh","С‰"=>"shh","СЉ"=>"",
"С‹"=>"y","СЊ"=>"","СЌ"=>"je","СЋ"=>"yu","СЏ"=>"ya"," "=>"-"
);
$regex = array('#(\.){2,}#', '#[^A-Za-z0-9\.\_\- ]#', '#^\.#');
$res = trim($file);
$res = strtr($res, $gost);
return preg_replace($regex, '', $res);
}
Пример:
- У нас есть два файла:
Там где.jpg
файл.zip
Код переведёт их:
fajl.zip
Tam-gde.jpg
