PHP でアップロードした中国語ファイル名が文字化けする問題の解決策、_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:07:57
オリジナル
1095 人が閲覧しました

phpによってアップロードされた中国語のファイル名が文字化けする問題を解決するソリューション、

PHP でのファイルのアップロードは技術的に最も基本的な点ですが、さらに深く進むと、解決しなければならない問題がたくさんあります。いいえ、中国語のファイルをアップロードすると、ファイル名が文字化けします。

以下は問題のコードです。非常に簡単です:

1. 問題コード

html部分:

コードをコピーします コードは次のとおりです:



<フォームアクション="upload_file.php" メソッド="投稿"
enctype="multipart/form-data">








php部分:



コードをコピーします コードは次のとおりです:
if ($_FILES["ファイル"]["エラー"] > 0)
{
echo "リターン コード: " . $_FILES["file"]["error"] "
";
}その他
{
echo "アップロード: " . $_FILES["ファイル"]["名前"] "
";
echo "タイプ: " . $_FILES["ファイル"]["タイプ"] "
";
echo "サイズ: " . ($_FILES["ファイル"]["サイズ"] / 1024) " Kb
";
echo "一時ファイル: " . $_FILES["file"]["tmp_name"] "
";
If (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] " はすでに存在します。";
}
その他
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"アップロード/" . $_FILES["ファイル"]["名前"]);
}
}

「テストデータ.txt」というファイルをアップロードしました、おお、ファイルはアップロードできましたが、ファイル名が文字化けしていました。

2. 最初のテスト

オンラインで解決策を検索し、

コードをコピーします コードは次のとおりです:
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

に変更されました

コードをコピーします コードは次のとおりです:
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" .iconv("UTF-8","gbk",$_FILES["file"]["name"]));

iconv 関数が false を返すことがわかりました。

関数のマニュアルを確認すると、2 番目のパラメータには特別な使い方があることがわかります。簡単に言うと、エンコードの後に​​ //TRANSLIT または //IGNORE を追加すると、翻訳できない文字が最も近い文字に変換されます。変換できない文字。

試してみる:

コードをコピーします コードは次のとおりです:
var_dump( iconv("UTF-8","gbk//TRANSLIT",$_FILES["ファイル"]["名前"]));
var_dump( iconv("UTF-8","gbk//IGNORE",$_FILES["ファイル"]["名前"]));

結果:

bool(false) string(4) ".txt"

つまり、漢字は変換できないし、近い文字すら存在しない ネットで紹介されている方法は万能ではないようです。

3. オンライン導入方法が失敗した場合は、もう一度試してください

推測ですが、おそらく私のシステムでは中国語ファイルを作成するときに文字化けが発生するので、コードを書き直しました:

コードをコピーします コードは次のとおりです:
move_uploaded_file($_FILES["file"]["tmp_name"], "アップロード/テストデータ.txt");

結果は文字化けもなく正常に作成されました。 。 。つまり、システムの問題ではありません。

考えてみてください、私の PHP ファイル自体は utf8 でエンコードされています

コードをコピーします コードは次のとおりです:
move_uploaded_file($_FILES["file"]["tmp_name"],"アップロード/テストデータ.txt");

このステートメントは utf8 エンコードを使用する必要があるため、前にアップロードしたファイル名は utf8 エンコードであってはならず、ソース文字列自体が utf8 エンコードされていないため、次のステートメントは間違っているはずです。

コードをコピーします コードは次のとおりです:

iconv("UTF-8","gbk//TRANSLIT",$_FILES["ファイル"]["名前"]);

関数を使用してソース文字列のエンコーディングを確認します:

コードをコピーします コードは次のとおりです:

$e=mb_detect_encoding($text, array('UTF-8', 'GBK','gb2312'));
エコー $e;

結果はCP936、つまりソース文字列エンコーディングはGBKです。

試してみる

コードをコピーします コードは次のとおりです:

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" .iconv("gbk","UTF-8",$_FILES["file"]["name"]));

問題解決、文字化けもなくなりました

4.別の解決策

実際には、HTML ファイルの head タグの途中に

を追加するという別の解決策があります。

コードをコピーします コードは次のとおりです:


したがって、エンコーディングは統一されたままとなり、トランスコードする必要はなくなります

5.以下が結論です

iconv 関数を使用すると、アップロード時の中国語のファイル名が文字化けする問題を解決できます。実際、iconv は、エンコーディングの不一致によって引き起こされるさまざまな文字化けの問題を解決できます。
ソース文字列のエンコードをまだ決定していない場合を除き、iconv 関数を使用するときは、まずソース文字列のエンコードを確認してください。
すべてのコードが一貫してエンコードされていることを確認し、iconv 関数は最後の手段としてのみ使用してください。
苦情を申し立てる場合は、サーバーに保存されるファイル名に中国語のファイル名を使用しないようにしてください。ファイル名は独自のファイル名に変換してください (英語のファイル名でも変換してください)。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/953152.html技術記事 php でアップロードされた中国語ファイル名が文字化けする問題の解決策。php でファイルをアップロードすることは最も基本的な技術的な点ですが、さらに深く掘り下げると、解決する必要がある問題がたくさんあります。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート