26

私はベトナム人で、次のような utf-8 ファイル名をアップロードしたいです

Tên Tệp Tiếng Việt.JPG

これが私のコードです

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>utf-8</title> 
</head> 

<body> 
<?php
    if(isset($_POST["submit"])) { 
       if($_FILES["upload"]["error"] > 0 ) echo "FILE ERROR!"; 
       else 
         { 
           $base_dir = "D:/"; 
           $fn = $_FILES["upload"]["name"]; 

           $fn2 = $base_dir.$fn;

           move_uploaded_file($_FILES["upload"]["tmp_name"],$fn2); 
         } 
     } 
?> 
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
  <input type="file" name="upload" id="upload" /> 
  <input type="submit" name="submit" id="submit" value="Send" /> 
</form> 
</body> 
</html> 

しかし、アップロードすると、コンピューターで表示される D:\ に次のようなファイルがあります

Tên Tệp Tiếng Việt.JPG

そのおかげで修正する方法

4

9 に答える 9

5

これmetaは効果がありません:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Web サーバーはすでにContent-Typeヘッダーを送信しており、エンコーディングを決定しているためです。Web ブラウザは同じエンコーディングでフォームを送信します。metaユーザーがオフラインの場合に便利です。

Content-Typeしたがって、自分でhttp ヘッダーをスネリングする必要があります。

<?php header("Content-Type: text/html; charset=utf-8"); ?>

html、コンテンツ、または送信されるものの前にこれを配置してください。


または、accept-charsetタグを付けてformもうまくいくはずです:

 <form accept-charset="utf-8"> 
于 2013-08-25T21:16:59.017 に答える
2

私はペルシャ語で、私の言語の utf-8 文字で同じ問題を抱えています。このコードで問題を解決できました:

$fn = $_FILES["upload"]["name"]; // name of file have some utf-8 characters
$name=iconv('utf-8','windows-1256', str_replace('ی', 'ي', $fn));
move_uploaded_file($_FILES["upload"]["tmp_name"],$name );

vientam 言語についてはよくわかりませんが、上記と同じコードをいくつか変更して使用できる可能性があります

$fn = $_FILES["upload"]["name"]; // name of file have some utf-8 characters
$name=iconv('utf-8','cp936', $fn);
move_uploaded_file($_FILES["upload"]["tmp_name"],$name );
于 2018-02-06T04:46:24.667 に答える
0

まず、ファイル名のエンコードを検出します (アップロード前)。

print_r($_FILES["upload"]);

ファイル名をデコーダーに挿入し、エンコーディングをチェックします。

于 2013-08-19T09:24:52.230 に答える
-1
function convToUtf8($str) 
{ 
if( mb_detect_encoding($str,"UTF-8, ISO-8859-1, GBK")!="UTF-8" ) 
{ 

return  iconv("gbk","utf-8",$str); 

} 
else 
{ 
return $str; 
} 

}


$filename= convToUtf8($filename) ;
于 2013-08-28T07:20:44.380 に答える
-2

これを試して

$imgname     = $_FILES['img'] ['name'] ;
$imgsize     = $_FILES['img'] ['size'] ;
$imgtmpname  = $_FILES['img'] ['tmp_name'] ;
$imgtype     = $_FILES['img'] ['type'] ;
$size     = 1024;
$imgtypes    = array('image/jpeg','image/gif','image/png');
$folder = "up";

if(empty($imgname)){
  echo "Shose ur photo";
}else if(!in_array($imgtype,$imgtypes)){
  echo "this photo type is not avalable";
}else if($imgsize > $size){
  echo "this photo is dig than 6 MB";
}else if($imgwidth > 5000){
echo "the file is to big";
}
else{
 move_uploaded_file($imgtmpname, $folder, $filename); 
}
于 2013-08-26T15:32:31.137 に答える
-3

これを使用できます

$fn2 = basename($_FILES['upload']['name']);
于 2013-08-24T19:45:21.150 に答える