2012-03-23 7 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

を知るために、この仲間

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

を使用するようにしてくださいその中の文字をstrtr(この場合は最も良い一致と見なされます)、str_replacepreg_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); 
関連する問題