ホームページ  >  記事  >  バックエンド開発  >  PHPファイルが中国語文字化けしてアップロードされた場合の対処法とPHPファイル名の中国語文字化けの問題

PHPファイルが中国語文字化けしてアップロードされた場合の対処法とPHPファイル名の中国語文字化けの問題

WBOY
WBOYオリジナル
2016-07-25 08:52:031024ブラウズ
  1. enctype="multipart/form-data">

复制代码

php上传代:

  1. if ($_FILES["file"]["error"] > 0)
  2. {
  3. echo "リターンコード: " . $_FILES["ファイル"]["エラー"] 。 "
    ";
  4. }else
  5. {
  6. echo "アップロード: " . $_FILES["ファイル"]["名前"] 。 "
    ";
  7. echo "Type: " . $_FILES["ファイル"]["タイプ"] 。 "
    ";
  8. echo "サイズ: " . ($_FILES["ファイル"]["サイズ"] / 1024) 。 " Kb
    ";
  9. echo "一時ファイル: " . $_FILES["ファイル"]["tmp_name"] 。 "
    ";
  10. if (file_exists("upload/" . $_FILES["file"]["name"]))
  11. {
  12. echo $_FILES["file"]["name"] . " すでに存在します。 ";
  13. }
  14. else
  15. {
  16. move_uploaded_file($_FILES["file"]["tmp_name"],
  17. "upload/" . $_FILES["file"]["name"]);
  18. }
  19. }
复制暗号

「検査データ.txt」という名前のファイルが上に転送されました、ああ、ファイルは転送されましたが、ファイル名は乱コードです。

以下は、php ファイル上での乱コードの原因分析と、いくつかの有効な解決方法を示しています。

将:

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

変更内容:

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

結果、iconv関数は値をfalseとして返します。 次の関数手册、発行された第二のパラメータは特別な使用法、简单翻訳一下在我是我可以在编 コードの裏面に追加//TRANSLIT または //IGNORE ,前者会は無法翻訳の文字转を最接近の文字名に,後者即ち、直接忽略は変換できない文字です。

次の図:

测试: PHPファイルが中国語文字化けしてアップロードされた場合の対処法とPHPファイル名の中国語文字化けの問題 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"], "upload/测试数据.txt");

結果は、システムの問題ではなく、成功しました。

php文件本身はutf8编码的,那么

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/测试数据.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 ファイルの先頭に追加:

したがって、コードはそのまま維持され、再コード化する必要はありません。

5、小结 iconv 関数を使用すると、上に送信されるテキスト ファイル名の乱コードの問題を解決できます。実際には、iconv は、構造化されていないことによるさまざまな乱コードの問題を解決できます。 iconv 関数を使用して、まだ決定されていないソース文字列のコードを事前に検査します。 すべてのコードの一致を確認しても、iconv 関数を使用した人はほとんどいません。

極力中文文件名を使用せず、サーバー上に保存されている文件名を自分の文件名に変換します(つまり、英文文件名も一下に変換します)。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。