Это моя проблема. Файлы не переименовываются. Что я делаю не так? Что я не вижу? Этот скрипт должен работать в Windows и Unix. Файл сценария в UNIX UTF-8 без спецификации. Пробовал Windows 1251, ANSI, но все еще не работает.
<?php
function Transliteration($FileName){
$CharReplace = array (
'А'=>'A', 'Б'=>'B', 'В'=>'V',
'Г'=>'G', 'Д'=>'D', 'Е'=>'E',
'Ё'=>'E', 'Ж'=>'ZH', 'З'=>'Z',
'И'=>'I', 'Й'=>'J', 'К'=>'K',
'Л'=>'L', 'М'=>'M', 'Н'=>'N',
'О'=>'O', 'П'=>'P', 'Р'=>'R',
'С'=>'S', 'Т'=>'T', 'У'=>'U',
'Ф'=>'F', 'Х'=>'H', 'Ц'=>'TS',
'Ч'=>'CH', 'Ш'=>'SH', 'Щ'=>'SHH',
'Ъ'=>'', 'Ы'=>'I', 'Ь'=>'',
'Э'=>'E', 'Ю'=>'YU', 'Я'=>'YA',
'а'=>'a', 'б'=>'b', 'в'=>'v',
'г'=>'g', 'д'=>'d', 'е'=>'e',
'ё'=>'yo', 'ж'=>'zh', 'з'=>'z',
'и'=>'i', 'й'=>'j', 'к'=>'k',
'л'=>'l', 'м'=>'m', 'н'=>'n',
'о'=>'o', 'п'=>'p', 'р'=>'r',
'с'=>'s', 'т'=>'t', 'у'=>'u',
'ф'=>'f', 'х'=>'h', 'ц'=>'ts',
'ч'=>'ch', 'ш'=>'sh', 'щ'=>'shh',
'ъ'=>'', 'ы'=>'i', 'ь'=>'',
'э'=>'e', 'ю'=>'yu', 'я'=>'ya',
"№"=>"N", " "=>"_", "–"=>"_",
"-"=>"_", " - "=>"_", ","=>"");
$FileNameTranslited = str_replace(array_keys($CharReplace), $CharReplace, $FileName);
return $FileNameTranslited;}
function Renaming(){
$WorkDir = opendir("ToRename") or die("Не могу открыть папку");
while ($CurrentFile = readdir($WorkDir)){
if ($CurrentFile != "." && $CurrentFile != ".."){
$TranslitedFile = Transliteration($CurrentFile);
if (rename($CurrentFile, $TranslitedFile))
{echo "File Renamed";}
else{echo "Some shit happen!";}
echo $CurrentFile." -> ".$TranslitedFile."<br>";}}}
Renaming();
?>
Большое спасибо StathisG! Это правильный ключ к решению. Но это все еще не работает. Смотри сюда:
function Renaming(){
$directory = 'ToRename/';
$WorkDir = opendir($directory) or die("Не могу открыть папку");
while ($CurrentFile = readdir($WorkDir)){
if ($CurrentFile != "." && $CurrentFile != ".."){
$WhichCodingWeWant = 'UTF-8';
$FileNameCoding = mb_detect_encoding($CurrentFile);
echo $FileNameCoding."<br/>";
$utf8_filename = mb_convert_encoding($CurrentFile, $WhichCodingWeWant, $FileNameCoding);
$TranslitedFile = Transliteration($utf8_filename);
mb_convert_encoding($TranslitedFile, $FileNameCoding, $WhichCodingWeWant);
echo mb_detect_encoding($TranslitedFile)."<br/>";
if (rename($directory . $CurrentFile, $directory . $TranslitedFile)) {
echo "File Renamed<br/>";
} else {
echo "Some shit happen!<br/>";
}
echo $utf8_filename." -> ".$TranslitedFile."<br>";
}
}
}
Renaming();
Как видите, я добавляю новые переменные «$ WhichCodingWeWant» и «$ FileNameCoding». Имя входящего файла: «Новый текстовый документ.txt» из «Гîâû Г © _ГІГҐГЄГ ± òîâà »Г © _äîêóìåГГІ.txt" должен быть "Novij_textovij_document.txt" Мой мозг взорван .. .
Хорошо ... шаг 3. Входящие данные как раньше: Новый текстовый документ.txt
function Renaming(){
$directory = 'ToRename/';
$WorkDir = opendir($directory) or die("Не могу открыть папку");
while ($CurrentFile = readdir($WorkDir)){
if ($CurrentFile != "." && $CurrentFile != ".."){
echo "What name is come: ".$CurrentFile."<br/>";
$WhichCodingWeWant = 'UTF-8';
$FileNameCoding = mb_detect_encoding($CurrentFile);
echo "File name encoding: ".$FileNameCoding."<br/>";
$utf8_filename = mb_convert_encoding($CurrentFile, $WhichCodingWeWant, $FileNameCoding);
echo "File name behind transliting: ".$utf8_filename."<br/>";
$TranslitedFile = Transliteration($utf8_filename);
echo "File name translited to: ".$TranslitedFile."<br/>";
mb_convert_encoding($TranslitedFile, $FileNameCoding, $WhichCodingWeWant);
echo "File name encoding converted to: ".mb_detect_encoding($TranslitedFile)."<br/>";
if (rename($directory . $CurrentFile, $directory . $TranslitedFile)) {
echo "File Renamed<br/>";
} else {
echo "Some shit happen!<br/>";
}
echo $utf8_filename." -> ".$TranslitedFile."<br>";
}
}
}
Renaming();
Result is:
What name is come: Новый текстовый документ.txt
File name encoding: UTF-8
File name behind transliting: ????? ????????? ????????.txt
File name translited to: ?????_?????????_????????.txt
File name encoding converted to: ASCII
Предупреждение:: Нет ошибки в E: \ WEB \ XAMPP \ htdocs \ my \ Site \ test \ test6.php в строке 32 Какое-то дерьмо случается! ????? ????????? ????????. txt -> ????? ????????? ????????. txt И файл не переименовывается в папке .
Зачем ASCII, если я хочу и делаю UTF-8? Я так понимаю, мне нечего понять! В любом случае спасибо StathisG за попытку мне помочь! Завтра попробую этот скрипт в системе Linux. И расскажу о результатах. Если у вас будут какие-то идеи по этому поводу, я буду рад это увидеть :)