ホームページ  >  記事  >  バックエンド開発  >  ファイルアップロードのエンコーディングに関する問題

ファイルアップロードのエンコーディングに関する問題

WBOY
WBOYオリジナル
2016-06-13 13:32:43865ブラウズ

ファイルアップロードのエンコーディングの問題
Flash+PHP を使用してファイルのバッチアップロードを実装します。 PHP では、ファイルを保存するときにエンコードの問題が発生しました:

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php
    header("Content-Type:text/html;charset=utf-8");
    function createDir($path){
        if (!file_exists($path)){
            createDir(dirname($path));
            mkdir($path, 0777);
        }
    }
    $uploaddir='upfile/'.date('Ymd').'/';
    createDir($uploaddir);
    $uploadfile=$uploaddir.iconv('utf-8','gbk',$_POST['fn']);
    if (move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadfile)) {
        echo 'OK'.$_POST['bn'].'{[(*})]'.$_POST['up'].'{[(*})]'.'$uploadjson'.'{[(*})]'.'$listjson';
    }else{
        echo 'ERROR';
    }
?>

ファイル名は、中国語、英語、フランス語、ロシア語など、非常に不規則です。現時点では、種類が不確かです。 、いくつかのファイルは保存されましたが、文字化けまたは切り詰められました(拡張子が失われました)。 iconv('utf-8','gbk',$_POST['fn'])、ここで何が問題なのでしょうか?やり方は?

-----解決策---------
現在のページでは utf-8
header("Content-Type:text/html;charset=utf-8");


が使用されており、これを gbk
$uploadfile に変換する必要があります。 =$uploaddir.iconv('utf-8','gbk',$_POST['fn']);

削除または
$uploadfile=$uploaddir.iconv('gbk' ,'utf -8', $_POST['fn']);
試してください
------解決策------------------
GBK でエンコードされた文字列には、ロシア語のこれらの記号がありません。つまり、中国語のみに適用されます
保存には utf-8 を使用することをお勧めします。ファイル名文字化けの問題は放置しても問題ありません。
------解決策------------------
$uploadfile = $uploaddir .base64_encode($_POST['fn']) .' pathinfo($_POST'fn'], PATHINFO_EXTENSION)
------解決策------------------
データソースが GBK の場合はどうすればよいですか?
iconv は //IGNORE を使用して特殊記号を無視し、UTF8 に変換するか、名前を変更します。
------解決策------------------
Windows マシン上のファイル名にロシア語またはアラビア語を入力できますか?
ファイル名は、顧客のオペレーティング システムのエンコーディングによって異なります。通常、国内ユーザーは中国語版の Windows を使用します。GBK にはロシア語などの言語が含まれています。別の言い方をすると、オペレーティング システムのエンコードが ISO-8859-1 であるユーザーに中国語名のファイルをダウンロードするよう依頼すると、たとえ gbk に変換されたとしても中国語のファイルは文字化けします。ランダムに名前を付けるだけです。そうしないと、世界中のさまざまなオペレーティング システムのユーザー システム コードが大きく異なるため、ここでわざわざ iconv を使用して変換する必要はありません。 。
私は現在 Ubuntu を使用していますが、システム エンコーディングは UTF-8 です。中国語、ロシア語、フランス語を GBK に変換しない場合は、私のようなユーザーにとっては正常です。しかし、GBK に変換すると、まだ文字化けします。ふふ。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。