ホームページ >バックエンド開発 >PHPチュートリアル >PHPファイルのダウンロードが文字化けする問題

PHPファイルのダウンロードが文字化けする問題

WBOY
WBOYオリジナル
2016-06-23 14:14:341005ブラウズ

ファイルのアップロードとダウンロードの機能を追加したいです。ファイルが大きい可能性があるため、サーバー上のファイルのパスをデータベースに保存し、ダウンロード時にそのパスに従ってファイルを読み取るという考えです。当初、アップロード時にページのファイル一覧に表示される中国語のファイル名が文字化けしていましたが、

mysql_query("SET NAMES 'utf8'");
を追加することで解消されました。その後、ダウンロード中に保存されるファイル名が文字化けする問題が発生したため、この問題を解決するためにこのコードも追加されました。しかし、ダウンロードしたファイルの中国語が文字化けしてしまいます。 txtのテキストでテストしてみたところ、英語やUTF-8形式のテキストは問題なかったのですが、デフォルトのANSIでは当然文字化けしてしまいました。サーバーに送信するときに文字化けするのか、データベースが UTF-8 でエンコードされているのかわかりませんが、マスター ページを変更する方法を教えてください。これも UTF-8 でエンコードされます。

curUser;	$logger = new CategoryLogger('log_definition');	if($notice!="auto")notice($notice);	$id=$mineid;//要下载文件的ID  	if(!isset($id) or $id=="") die("error:id none");  //定位记录,读出 	$conn=mysql_connect('10.4.16.102','root','abc') or die('Unable to connect .');       mysql_select_db('greenmine',$conn) or die(mysql_error($conn));	mysql_query("SET NAMES 'utf8'");    $sql=  "select * from file where id=$id";  	$result=  mysql_query($sql);  	if(!$result) die("error:mysql query");  	$num=mysql_num_rows($result);  	if($num<1) die("error:no this recorder");  	$data=mysql_result($result,0,"file_data");  //文件存储路径	$type=mysql_result($result,0,"file_type");  	$name=mysql_result($result,0,"file_name"); 	mysql_close($conn);  	$file_name=$name;	$file_dir=$data;	if   (!file_exists($file_dir))   {   //检查文件是否存在   			 echo   "文件找不到";    			exit;      	}   else   {  	$filePath = $file_dir;//此处给出你下载的文件在服务器的什么地方       $fileName = $file_name;       //此处给出你下载的文件名       $file = fopen($filePath, "r"); //   打开文件Header("Content-type:application/octet-stream ");Header("Accept-Ranges:bytes ");Header("Accept-Length:   " . filesize($filePath));Header("Content-Disposition:   attachment;   filename= " . $fileName);              //   输出文件内容       echo fread($file, filesize($filePath));       fclose($file);       exit;     }}?>


ディスカッションに返信 (解決策)

ファイル名が文字化けしていますか、それともファイルの内容が文字化けしていますか?
ライブラリにはファイル名のみが保存され、ファイルは独立して保存されます。ファイルを開くには $file = fopen($filePath, "r b");
ダウンロードするファイル名
Header("Content-Disposition:attachment; filename= " . $fileName);
ユーザーが使用する必要があります オペレーティング システム パッケージ

ファイル名が文字化けしていますか、それともファイルの内容が文字化けしていますか?

ライブラリにはファイル名のみが保存され、ファイルは独立して保存されます。ファイルを開くには $file = fopen($filePath, "rb");

ダウンロードするファイル名
Header("Content-Disposition:attachment; filename= " . $fileName);
ユーザーが使用するオペレーティング システム パッケージ
… ファイル名は正しいですが、中身が文字化けしています。ファイルはサーバー上に個別に保存されます。 rbに変更してもダメです

ファイル内容を操作しない限り、ファイル自体が文字化けしているとしか言えません

ファイル内容を操作しない限り、ファイル自体が文字化けしているとしか言えません。この問題は、この PHP ページのエンコード形式を UTF-8+bom から UTF-8 に変更するだけで解決します。Bamboo さんにも感謝します。

doc または docx などの Word ファイルをアップロードしていただけますか。ダウンロード後に開くと、ファイルの内容は正常に表示されますか?

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