PHPが複数形式のファイルダウンロードを実装し文字化け問題を解決
ここ数日間、あるプロジェクトに取り組んでいて、通常のファイルのダウンロードは問題ありませんが、中国語であり、複数の形式がある場合、ダウンロードがより困難になります。
長年のバグがついに完成しました。次の点に注意する必要があります:
1. 中国語のファイル名を持つファイルについては、必ずトランスコードを行ってください。中国語の文字化け。ほとんどのホストのエンコーディングが GB2312 であり、UTF-8 である
を使用しているため、ファイルが変換できない場合のエラーを防ぐために、操作前に iconv() 関数を使用して をトランスコードする必要があります。見つけられた。
2. ダウンロードするファイルの形式を判断し、その形式に応じて header() 関数を記述する必要があります。
具体的なコードは次のとおりです:
<?php header("Content-type:text/html;charset=utf-8"); $filename = "大学英语选课说明.docx"; //文件名 $filename = iconv("utf-8","gb2312//IGNORE",$filename); //转码 $file = "upload/".$filename; //文件路径 $len = filesize($file); //文件大小 $file_extension = strtolower(substr(strrchr($filename,"."),1)); //文件后缀名 switch( $file_extension ) //判断文件类型 { case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "docx": case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpeg": case "jpg": $ctype="image/jpg"; break; case "mp3": $ctype="audio/mpeg"; break; case "wav": $ctype="audio/x-wav"; break; case "mpeg": case "mpg": case "mpe": $ctype="video/mpeg"; break; case "mov": $ctype="video/quicktime"; break; case "avi": $ctype="video/x-msvideo"; break; case "php": case "htm": case "html": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break; default: $ctype="application/force-download"; } header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Type: $ctype"); $header="Content-Disposition: attachment; filename=".$filename.";"; header($header); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".$len); readfile($file); ?>
さまざまなブラウザに適応し、中国語の文字化けエラーを回避するために、回避できるコードをインターネット上で見つけました。コードは次のとおりです。
<?php
<span style="white-space:pre"> </span>$ua = $_SERVER["HTTP_USER_AGENT"];
<span style="white-space:pre"> </span>$filename = "中文 文件名.txt";
<span style="white-space:pre"> </span>$encoded_filename = urlencode($filename);
<span style="white-space:pre"> </span>$encoded_filename = str_replace("+", "%20", $encoded_filename);
<span style="white-space:pre"> </span>header('Content-Type: application/octet-stream');
<span style="white-space:pre"> </span>if (preg_match("/MSIE/", $ua)) {
<span style="white-space:pre"> </span>header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
<span style="white-space:pre"> </span>} else if (preg_match("/Firefox/", $ua)) {
<span style="white-space:pre"> </span>header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
<span style="white-space:pre"> </span>} else {
<span style="white-space:pre"> </span>header('Content-Disposition: attachment; filename="' . $filename . '"');
<span style="white-space:pre"> </span>}
?>
Me このコードが使用されない理由は、上で書いたコードをFirefox、IE、Opera、360などのブラウザで試してみたところ、ブラウザの問題による文字化けエラーは発生しなかったからです
漢字の文字化けの問題は基本的に解決されていると思います。
私自身の経験ですので、ご参考までに!

ホット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)

ホットトピック









[SpringBoot] Feign 呼び出しを介してヘッダーのパラメーターを渡す Feign を介してヘッダー パラメーターを渡す方法 問題の説明 Feign を使用して Spring Cloud の別のサービスの API インターフェイスをリクエストする場合、ヘッダーでパラメーターを渡す必要があります。特別な処理が行われると、ヘッダー内のパラメータが失われます。解決策 1: @RequestHeader(name="headerName") を介して渡します。例: Feign は次のように定義されます @FeignClient(name="service-name")pub

Linux ヘッダーは、コンテンツに関するメタデータを含めるために使用されるファイルまたはデータ ストリームの先頭を指します。ヘッダー ファイルを正しく記述して使用することで、開発者はシステム リソースをより有効に活用し、コードの可読性と保守性を向上させることができます。

PHP は、動的な Web サイトや Web アプリケーションの作成に使用できる強力なプログラミング言語です。最も強力な機能の 1 つは、PHP の header() メソッドです。この記事では、PHP の header() メソッドを使用して Web ページを調整する方法を説明します。

PHP ヘッダーでジャンプを実装する方法: 1. "Header("Location:$url");" 構文を使用してジャンプを実装します。 2. "if($_COOKIE[" u_type のようなジャンプ ステートメントを使用して、if 判定を使用してジャンプを実装します) "]){ header('location:register.php'); } else{ setcookie('u_type','1','86400*360');"。

相違点: 1. head タグは、すべての head 要素のコンテナであるドキュメントの先頭を定義するために使用され、header タグはドキュメントのヘッダー (紹介情報) を定義するために使用されます; 2. すべてのブラウザは、 head タグと古いバージョンのブラウザ どのブラウザも header タグをサポートしていません。header タグをサポートするには、IE9 以降などのブラウザが必要です。

HMD Skyline (Amazon で $499 で入手可能) が先月発売されたとき、ネオン ピンクとツイスト ブラックの 2 色で発売されました。これらに、ブルー トパーズと呼ばれる 3 番目の色が加わりました。 HMD Global は、ph の公式ケースも発表しました。

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

PHP ファイル ダウンロード関数の完全なリスト: readfile、ヘッダー、Content-Disposition およびその他の関数のファイル ダウンロードの例分析 ファイルのダウンロードは Web アプリケーションの重要な機能の 1 つであり、広く使用されている Web 開発言語としての PHP は、多くの Aファイルのダウンロードを実装する関数とメソッド。この記事では、readfile、header、Content-Dispo など、PHP で一般的に使用されるファイル ダウンロード関数を紹介します。
