php上传代:
「検査データ.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 ,前者会は無法翻訳の文字转を最接近の文字名に,後者即ち、直接忽略は変換できない文字です。 次の図:测试: 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 関数を使用した人はほとんどいません。極力中文文件名を使用せず、サーバー上に保存されている文件名を自分の文件名に変換します(つまり、英文文件名も一下に変換します)。 |