2012-06-01 8 views
0

У меня есть один каталог, в котором я перечисляю все файлы в определенном каталоге. имя файла содержит один символ, отличный от a-z и 0-9. его как маленькое «i» без точки над «i». Имя файла: «ClrmamePro Kullanımı English.mp4». Посмотрите на «Kullanımı» и «английский». вы можете увидеть разницу между «i» и «ı».PHP автоконвертирует специальный символ?

Теперь проблема заключается в том, что когда я делаю каталог листинга PHP автоматически преобразует букву «I» к «я» и, следовательно, во время выполнения переименования я получаю ошибку

rename(E:/workspace/project/ClrmamePro Kullanimi English.mp4, 
E:/workspace/project/movie_11.mp4) [<a href='function.rename'>function.rename</a>]: The system cannot find the file specified. 

У меня есть регулярное выражение, чтобы исправить имя файла, но поскольку PHP автоматически преобразует «ı» в «i», я не могу его поймать.

код для файлов каталога, как показано ниже

function getDirectoryListing($directory) { 
    // create an array to hold directory list 
    $results = array(); 
    // create a handler for the directory 
    $handler = opendir($directory); 
    // open directory and walk through the filenames 

    while ($file = readdir($handler)) { 
     // if file isn't this directory or its parent, add it to the results 
     if (strpos($file,'.') !== 0) { 
      $results[] = $file; 
     } 
    } 

    closedir($handler); 
    // done! 
    return $results; 
} 

echo '<pre>'; 
print_r(getDirectoryListing('movies')); 
echo '</pre>'; 

о/р я получаю, как показано ниже:

Array 
(
    [0] => ClrmamePro Kullanimi English.mp4 
    [1] => Download Gears of War 3 - eSoftZone.webm 
    [2] => Facebook_ Science and the Social Graph.MP4 
) 

увидеть первый файл с индексом 0. фактическое имя файла в моем каталог

ClrmamePro Kullanımı English.mp4 
+2

Вы должны показать код, который вы используете. – JJJ

+0

есть только код каталога. Не более того –

+0

Вам все равно нужно показать это. – JJJ

ответ

0

Для каждого файла в каталоге movies, следующий код ы nippet выводит имя файла и существует ли файл. Отображаемое имя файла кодируется для правильного отображения специальных символов.

Метод encode преобразует все символы в строке "$file " в объекты HTML. Этот метод является слегка измененной версией решения в статье «Переполнение стека». "How to convert all characters to their html entity equivalent using PHP." Решение, найденное в статье, не работает на моем PHP-сервере, поэтому я переместил prependAmpersandAndPound вне функции.

// https://stackoverflow.com/a/3005240/788324 
function prependAmpersandAndPound($n) { 
    return "&#$n;"; 
} 
function encode($str) { 
    $str = mb_convert_encoding($str , 'UTF-32', 'UTF-8'); 
    $t = unpack("N*", $str); 
    $t = array_map(prependAmpersandAndPound, $t); 
    return implode("", $t); 
} 

echo "<pre>\n"; 
$listing = getDirectoryListing('movies'); 
foreach ($listing as $file) { 
    echo "\"" . encode($file) . "\" "; 
    if (file_exists('movies/' . $file)) { 
     echo "exists.\n"; 
    } else { 
     echo "does not exist.\n"; 
    } 
} 
echo '</pre>'; 

Подражая вашей установки, то фрагмент кода выше выходы:

HTML Источник:

<pre> 
"&#68;&#111;&#119;&#110;&#108;&#111;&#97;&#100;&#32;&#71;&#101;&#97;&#114;&#115;&#32;&#111;&#102;&#32;&#87;&#97;&#114;&#32;&#51;&#32;&#45;&#32;&#101;&#83;&#111;&#102;&#116;&#90;&#111;&#110;&#101;&#46;&#119;&#101;&#98;&#109;" exists. 
"&#67;&#108;&#114;&#109;&#97;&#109;&#101;&#80;&#114;&#111;&#32;&#75;&#117;&#108;&#108;&#97;&#110;&#305;&#109;&#305;&#32;&#69;&#110;&#103;&#108;&#105;&#115;&#104;&#46;&#109;&#112;&#52;" exists. 
"&#70;&#97;&#99;&#101;&#98;&#111;&#111;&#107;&#95;&#32;&#83;&#99;&#105;&#101;&#110;&#99;&#101;&#32;&#97;&#110;&#100;&#32;&#116;&#104;&#101;&#32;&#83;&#111;&#99;&#105;&#97;&#108;&#32;&#71;&#114;&#97;&#112;&#104;&#46;&#77;&#80;&#52;" exists. 
</pre> 

отображается в браузере:

"Download Gears of War 3 - eSoftZone.webm" exists. 
"ClrmamePro Kullanımı English.mp4" exists. 
"Facebook_ Science and the Social Graph.MP4" exists. 
Смежные вопросы