を使用してファイルを保存してmove_uploaded_file($file['tmp_name'], $save_path . $FileName);
いますが、選択したファイル名がアラビア語の場合、ファイルは次のような奇妙な文字で保存されます:ÒíäÈ.pdf
。
後でアップロードしたファイルを開こうとすると、ファイルが見つかりませんと表示されます。(実際のファイル)どうすればよいですか?
を使用してファイルを保存してmove_uploaded_file($file['tmp_name'], $save_path . $FileName);
いますが、選択したファイル名がアラビア語の場合、ファイルは次のような奇妙な文字で保存されます:ÒíäÈ.pdf
。
後でアップロードしたファイルを開こうとすると、ファイルが見つかりませんと表示されます。(実際のファイル)どうすればよいですか?
ラテン語に類似した文字に変換する任意の文字列に音訳を使用できます。私の非常にカスタムな音訳コードは次のようになります。
// convert a utf8-encoded string into latin representative
function transliterate_string($params=array())
{
// PARAMS: "string", "language"
// 0) fill-in "native" chars by language and their "latin" representative
$SP_trans = array(
"ae"=>array("native"=>"ة,بْ,...","latin"=>"a,b,..."),
...other langs if you want
);
// 1) break "native" & "latin" strings
$nc = explode(",",$SP_trans[ $params["language"] ]["native"]);
$lc = explode(",",$SP_trans[ $params["language"] ]["latin"]);
// 2) convert to lower first
$string = mb_strtolower($params["string"],"utf-8");
// 3) loop each character
mb_internal_encoding("UTF-8");
for($x=0,$sz=mb_strlen($string);$x<$sz;$x++) {
$char = mb_substr($string,$x,1);
$index = array_search($char,$nc);
$out[$x] = ($index===FALSE ? $char : $lc[$index]);
}
return trim(implode("",$out));
}
この関数は、文字列をスキャンし、特定の文字セットの各文字をカスタムの方法でラテン語に変換するだけです。次にsafely
、ファイルをラテン語として保存できます。
タイムスタンプを使用して画像名の名前を変更することをお勧めします
$imgname = time().'.'.'jpg';
$imgtmpname=$_FILES['file']['tmp_name'];
$fullpath= $path.$imgname;
$filename = $imgname;
move_uploaded_file($imgtmpname,$fullpath);
また$imgname
、この名前で画像を取得できるようにデータベースに保存します。タイムスタンプが変更され続けるため、画像間の名前の競合も回避されます。