2012-03-23 2 views
17

Мне было интересно, можно ли изменить имя загружаемого файла. Я имею в виду то, что я пытаюсь сделать, так это то, что пользователь загружает файл, который может иметь некоторые специальные символы, такие как специальные символы на некоторых европейских языках.Заменить специальные символы перед загрузкой файла с помощью PHP

Что я планирую сделать, так это то, что перед использованием команды move_uploaded_file можно изменить/preg_replace специальные символы с нормальными символами, чтобы файл был загружен и сохранен с новым именем, которое имеет только обычные символы.

+0

Это возможно, да. Что вы пробовали? –

ответ

26
// Get the original file name from $_FILES 
$file_name= $_FILES['file']['name']; 

// Remove any characters you don't want 
// The below code will remove anything that is not a-z, 0-9 or a dot. 
$file_name = preg_replace("/[^a-zA-Z0-9.]/", "", $file_name); 

// Get the location of the folder to upload into 
$location = 'path/to/dir/'; 

// Use move_uploaded_file() 
move_uploaded_file($_FILES["file"]["tmp_name"], $location.$file_name); 
+0

@ 472084, вы решили мою длинную проблему со специальными символами в Zip-файле и под подкаталогами или файлами. Отлично. :) – NullPointer

+1

это отлично работает, но вы также должны добавить точку для расширения файла. $ file_name = preg_replace ("/ [^ a-zA-Z0-9.] /", "", $ File_name); –

+0

он работает, но не изменил/не переименовал имя файла в пути. – jned29

0

Вы можете получить оригинальное имя файла для загруженного файла из $_FILES, и вы можете создать свою «особую» версию заменяя в нем символы strtr (который звучит как наилучшее совпадение для этого случая), str_replace, preg_replace или любую другую функцию обработки строк.

Лучший подход зависит от того, что точно вы хотите.

0

Вы могли бы сделать это так, написать простую функцию strip_special_chars(), чтобы заменить символы, которые вы хотите в строке

$tmp_name = $_FILES["file"]["tmp_name"]; 
$name = strip_special_chars($tmp_name); 
move_uploaded_file($name, "path/to/dir/"); 
+0

благодарит ребята за ваши ответы и пример кода, решил это – 125369

0

Также вы можете использовать функцию для специальных символов, как это:

function safename($theValue) 
{ 
    $_trSpec = array(
     'Ç' => 'C', 
     'Ğ' => 'G', 
     'İ' => 'I', 
     'Ö' => 'O', 
     'Ş' => 'S', 
     'Ü' => 'U', 
     'ç' => 'c', 
     'ğ' => 'g', 
     'ı' => 'i', 
     'i' => 'i', 
     'ö' => 'o', 
     'ş' => 's', 
     'ü' => 'u', 
    ); 
    $enChars = array_values($_trSpec); 
    $trChars = array_keys($_trSpec); 
    $theValue = str_replace($trChars, $enChars, $theValue); 
    $theValue=preg_replace("@[^A-Za-z0-9\-_.\/][email protected]","-",$theValue); 
    $theValue=strtolower($theValue); 
    return $theValue; 
} 

Будьте осторожны, позвольте. для расширения файла.

А затем изменить исходное имя временного файла,

$tempFile = $_FILES['Filedata']['tmp_name']; 
$targetFile = safename($targetFile); 

$location = 'path/to/dir/'; 
move_uploaded_file($_FILES["file"]["tmp_name"], $location.$targetFile); 
Смежные вопросы