php上传中文文件名乱码问题处理方案,
php上传中文文件名乱码问题处理方案,
php上传文件是最最基础的一个技术点,但是深入进去也有不少问题需要解决,这不,上传中文文件后,文件名变成了乱码。
下面是问题代码,很简单:
1.问题代码
html部分:
复制代码 代码如下:
enctype="multipart/form-data">
php部分:
复制代码 代码如下:
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "
";
}else
{
echo "Upload: " . $_FILES["file"]["name"] . "
";
echo "Type: " . $_FILES["file"]["type"] . "
";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
}
}
上传了一个文件名为“测试数据.txt”的文件,oh ho,文件是传上去了,但是文件名为乱码。
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。
查一下函数手册,发现第二个参数有特别的用法,简单翻译一下就是我可以在编码的后面追加//TRANSLIT 或 //IGNORE ,前者会将无法翻译的字符转成最接近的字符,后者就是直接忽略不能转化的字符。
试一下:
复制代码 代码如下:
var_dump( iconv("UTF-8","gbk//TRANSLIT",$_FILES["file"]["name"]));
var_dump( iconv("UTF-8","gbk//IGNORE",$_FILES["file"]["name"]));
结果:
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["file"]["name"]);
使用函数检查源字符串的编码:
复制代码 代码如下:
$e=mb_detect_encoding($text, array(‘UTF-8', ‘GBK','gb2312'));
echo $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函数。
吐槽一下,尽量不使用中文文件名作为服务器上保存的文件名,请将文件名转化成自己的文件名(即使是英文文件名也请转化一下)。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPDompdf の中国語文字化け問題を解決する方法 PHPDompdf は、HTML 文書を PDF ファイルに変換するツールで、強力で使いやすいです。ただし、中国語のコンテンツを処理すると、中国語の文字化けの問題が発生することがあります。この記事では、PHPDompdf の中国語文字化け問題を解決するいくつかの方法と具体的なコード例を紹介します。 1. フォント ファイルを使用して中国語コンテンツを処理する場合、よくある問題は、Dompdf がデフォルトで中国語コンテンツをサポートしていないことです。

PyCharm の中国語文字化けの問題を解決する究極の方法には、特定のコード例が必要です。はじめに: PyCharm は、一般的に使用される Python 統合開発環境 (IDE) として、強力な機能とフレンドリーなユーザー インターフェイスを備えており、多くの人に愛され、使用されています。開発者の大多数。ただし、PyCharm が中国語の文字を処理すると、文字化けが発生する場合があり、開発やデバッグで特定の問題が発生します。この記事では、PyCharmの中国語文字化け問題の解決方法と具体的なコード例を紹介します。 1. プロジェクトをセットアップする

MySQL インストール時に中国語が文字化けする一般的な原因と解決策 MySQL は一般的に使用されるリレーショナル データベース管理システムですが、使用中に中国語の文字化けの問題が発生し、開発者やシステム管理者を悩ませることがあります。中国語の文字化けの問題は、主に文字セットの設定が間違っていることや、データベースサーバーとクライアントの間で文字セットが一致していないことが原因で発生します。この記事では、MySQL インストールにおける中国語の文字化けの一般的な原因と解決策を詳しく紹介し、誰もがこの問題をよりよく解決できるようにします。 1. よくある理由: 文字セットの設定

ajax で中国語の文字化けを送信する場合の解決策: 1. 統一されたエンコード方式を設定する; 2. サーバー側のエンコード; 3. クライアント側のデコード; 4. HTTP 応答ヘッダーの設定; 5. JSON 形式を使用する。詳細な導入: 1. 統一されたエンコード方式を設定して、サーバーとクライアントが同じエンコード方式を使用するようにします。通常の状況では、UTF-8 は複数の言語と文字セットをサポートできるため、一般的に使用されるエンコード方式です。 2 、サーバー側のエンコード: サーバー側で、中国語データが正しいエンコード方法でエンコードされてからクライアントなどに渡されることを確認します。

PHP Webページの中国語文字化け問題は、Webページ表示時に中国語の文字が文字化けして表示される問題で、エンコーディングの不一致や文字セットが設定されていないことが原因で発生することが多いです。 PHP Web ページの中国語文字化けの問題を解決するには、さまざまな側面から始める必要があります。以下に、一般的な解決策と具体的なコード例をいくつか示します。 PHP ファイルのエンコードを設定する: まず、PHP ファイル自体のエンコードが UTF-8 であることを確認します。エディタで保存するときに UTF-8 エンコードを設定するか、PHP ファイルのヘッダーに次のコードを追加して設定することができますエンコーディング: &l

Linux の中国語文字化けの問題は、多くの中国人ユーザーが Linux システムを使用するときによく遭遇する問題です。中国語の文字化けの主な原因は、Linux システムで使用されるデフォルトの文字エンコーディングが UTF-8 であることですが、一部のソフトウェアやアプリケーションが UTF-8 エンコーディングと互換性がないため、中国語の文字が正しく表示されないことがあります。この問題を解決するには多くの方法がありますが、いくつかの一般的な解決策を以下で詳しく説明し、具体的なコード例を示します。端末の文字エンコーディング設定を変更する: 端末の文字エンコーディング設定によって、端末が正しく動作できるかどうかが決まります。

Eclipse で中国語の文字化けを迅速に解決するための実践的なヒントには、特定のコード サンプルが必要です。 概要: Eclipse は、複数のプログラミング言語の開発をサポートするだけでなく、複数のオペレーティング システムもサポートする、広く使用されている統合開発環境 (IDE) です。しかし、Eclipseを使用していると時折中国語の文字化けが発生し、開発作業に不便をもたらすことがあります。この記事では、Eclipse における中国語の文字化けの問題を迅速に解決するための実践的なテクニックを、具体的なコード例を交えて紹介します。 1つ、

matplotlibの中国語文字化けを素早く解決する効果的な方法 はじめに: matplotlibはPythonでよく使われる描画ライブラリですが、注釈や表示に中国語を使用すると文字化けがよく発生します。この記事では、いくつかの効果的な回避策を紹介し、具体的なコード例を示します。 1. フォントを設定します。matplotlib はデフォルトで中国語表示にシステム フォントを使用しますが、システム フォントには中国語の文字が含まれていないことが多いため、適切な中国語フォントを手動で設定する必要があります。まず、コンピュータに次の機能があるかどうかを確認する必要があります。
