Заменяйте специальные символы перед загрузкой файла с помощью PHP

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

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

// 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 az, 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); 

попробуйте использовать этот bro

  $result = iconv("UTF-8", "ASCII//TRANSLIT", $text); 

узнать больше о том, как заменить специальные символы теми, на которых они основаны на PHP?

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

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

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

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

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

 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\-_.\/]+@i","-",$theValue); $theValue=strtolower($theValue); return $theValue; } 

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

И затем измените исходное имя файла temp,

 $tempFile = $_FILES['Filedata']['tmp_name']; $targetFile = safename($targetFile); $location = 'path/to/dir/'; move_uploaded_file($_FILES["file"]["tmp_name"], $location.$targetFile);