ホームページ php教程 php手册 Content-Disposition非英文下的处理注解

Content-Disposition非英文下的处理注解

Jun 06, 2016 pm 08:13 PM
content-disposition r 対処する 注釈 英文

RFC标准就是个屁

RFC标准就是个屁啊。各种行为就没个统一的,根源就是早期协议对header本身的编码没有做规定,而现实中,浏览器有面临这种需求 于是就纷纷乱操了。。

就是个抱怨文 记录下免得自己忘记? 主要的内容 这篇文章都讲了 所以 这边给个注解,

主要的意思 大家还是看原文 我来说下目前 RFC 5987 正式规定了 HTTP Header 中多语言编码的处理方式,规定是这样的:

<span class="text">parameter*=charset'lang'value</span>

其中 value 应根据 RFC 3986 Section 2.1 使用百分号进行编码,并且规定浏览器至少应该支持 ASCII 和 UTF-8

2011年 RFC 6266 发布,正式将 Content-Disposition 纳入 HTTP 标准,并再次强调了 RFC 5987 中多语言编码的方法,还给出了一个范例用于解决向后兼容的问题

但是由于HTTP 1.1 草案中建议的使用 RFC 2047 来进行多语言编码的特性从未被主流浏览器支持过,我们把lang那个置空,之后对应到Content-Disposition就是这样的

filename*=utf-8''encoded_text

其中,encoded_text指的是将 UTF-8 编码的原始文件名按照 RFC 3986 进行百分号 urlencode 后得到的( PHP 中对应 <span class="php"><span class="kw3">rawurlencode</span><span class="br0">(</span><span class="br0">)</span></span> 函数,<span class="php"><span class="kw3">rawurlencode</span></span>会把空格编码成%20,而PHP的urlencode会把空格编码为+号 这个是不对的)。

所以 原文博主给出了一个RFC推荐的方式,测试下来目前也确实安好

Content-Disposition: attachment;
                     filename="$encoded_fname";
                     filename*=utf-8''$encoded_fname
ログイン後にコピー

但是,等等,这还没完 还是那个<span class="php"><span class="kw3">rawurlencode</span></span>的问题。使用这种方式WebKit和Gecko核心的浏览器都没有问题 但是IE又来作了 从IE7~IE11 %20 还是显示成 %20(就是空格被编码以后)? 你让强迫症用户咋办啊。尝试不进行编码,Firefox就会把空格后面的字给丢了,Chrome依然可以正常显示。

虽然上面这张hack很优雅的能显示汉字了,但是为了强迫症用户考虑 还得根据IE这个奇葩来处理一下 我现在使用这样的代码

header('Content-type: application/octet-stream');
$fileName = rawurlencode($info['name']);
//IE不能正确的处理空格 IE11也不行 还是避免不了hack IE6必须附加一个正确的英文扩展名
if (strpos($_SERVER["HTTP_USER_AGENT"],'Trident') !== false) $fileName = str_replace('%20','_',$fileName);
header(sprintf("Content-Disposition: attachment; filename=%1\$s; filename*=%2\$s''%1\$s",$fileName,(defined("CHARSET"))?CHARSET:'UTF-8'));
ログイン後にコピー

我把%20替换成了下划线 当然直接替换成空格也是可以的。还是免不得对IE这个奇葩做一些特殊处理 但是已经比网上流传的那些trick更加符合标准多了。我喜欢这种方式。

补充一句:DZ的那个做法也是不恰当的。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

WIN10サービスホストの動作プロセスがCPUを過剰に占有している WIN10サービスホストの動作プロセスがCPUを過剰に占有している Mar 27, 2024 pm 02:41 PM

1. まず、タスクバーの空白スペースを右クリックして[タスクマネージャー]オプションを選択するか、スタートロゴを右クリックして[タスクマネージャー]オプションを選択します。 2. 開いたタスク マネージャー インターフェイスで、右端の [サービス] タブをクリックします。 3. 開いた[サービス]タブで、下の[サービスを開く]オプションをクリックします。 4. 表示される[サービス]ウィンドウで、[InternetConnectionSharing(ICS)]サービスを右クリックし、[プロパティ]オプションを選択します。 5. 表示されたプロパティ画面で[プログラムから開く]を[無効]に変更し、[適用]をクリックして[OK]をクリックします。 6. スタートロゴをクリックし、シャットダウンボタンをクリックして[再起動]を選択し、コンピュータの再起動を完了します。

PHP コードドキュメントの王様: PHPDoc の上級ガイド PHP コードドキュメントの王様: PHPDoc の上級ガイド Mar 02, 2024 am 08:43 AM

はじめに: PHPDoc は、理解しやすく有益なドキュメントを作成する PHP コードのコメント標準です。 PHPDoc では、特定のコメント タグを使用することで、開発者が関数、クラス、メソッド、その他のコード要素に関する重要な詳細を提供できるようになります。この高度なガイドでは、PHPDoc を詳しく説明し、その機能を実証し、効果的な文書化戦略を提供します。構文とタグ: PHPDoc コメントは二重スラッシュ (//) または複数行コメント (/**/) で始まります。一般的なアノテーション タグをいくつか示します。 @param: 関数またはメソッドのパラメータを定義します。 @return: 関数またはメソッドの戻り値を指定します。 @throws: 関数またはメソッドによってスローされる可能性のある例外について説明します。 @var: クラスの属性またはインスタンスを定義します

CSV ファイル操作のクイックガイド CSV ファイル操作のクイックガイド Dec 26, 2023 pm 02:23 PM

CSV 形式ファイルを開いて処理する方法を簡単に学習します。データ分析と処理の継続的な開発により、CSV 形式は広く使用されるファイル形式の 1 つになりました。 CSV ファイルは、さまざまなデータ フィールドがカンマで区切られた、シンプルで読みやすいテキスト ファイルです。学術研究、ビジネス分析、データ処理のいずれの場合でも、CSV ファイルを開いて処理する必要がある状況に頻繁に遭遇します。次のガイドでは、CSV 形式ファイルを開いて処理する方法をすぐに学ぶ方法を説明します。ステップ 1: CSV ファイル形式を理解する まず、

JUnit フレームワークのテスト メソッドにアノテーションはどのように使用されますか? JUnit フレームワークのテスト メソッドにアノテーションはどのように使用されますか? May 06, 2024 pm 05:33 PM

JUnit フレームワークのアノテーションは、テスト メソッドの宣言と構成に使用されます。主なアノテーションには、@Test (テスト メソッドの宣言)、@Before (テスト メソッドの実行前に実行されるメソッド)、@After (テスト メソッドの後に実行されるメソッド) があります。が実行される)、@ BeforeClass (すべてのテスト メソッドが実行される前に実行されるメソッド)、@AfterClass (すべてのテスト メソッドが実行された後に実行されるメソッド)、これらのアノテーションは、テスト コードを整理して簡素化し、テスト コードの信頼性を向上させるのに役立ちます。明確な意図と構成を提供することで、読みやすさと保守性を向上させます。

Google Chromeを中国語モードに変更するにはどうすればよいですか? Google Chromeを中国語モードに変更するにはどうすればよいですか? Mar 13, 2024 pm 07:31 PM

Google Chromeで中国語を英語に変更するにはどうすればよいですか?友人の中には、Google Chrome を英語に設定して、使用中に継続的に英語力を向上させたいと考えている人もいます。では、どうやって英語に設定すればいいのでしょうか? Google Chromeはデフォルトでは中国語になっていますが、以下ではGoogle Chromeの言語を英語に設定する方法を紹介しますので、見てみましょう。設定手順: 1. 下図に示すように、[Google Chrome]を開きます。 2. 以下の図に示すように、Google Chrome インターフェースの右上隅にある [3 つの点] メニューをクリックします。 3. メニューページに入ったら、次の図に示すように [設定] を見つけます。 4. 設定ページに入ったら、次の図に示すように、[言語]オプションをクリックします。 5. 次の図に示すように、言語インターフェイスで [言語の追加] を選択します。

PHP で特殊文字を処理し、一重引用符を変換する方法を学習します。 PHP で特殊文字を処理し、一重引用符を変換する方法を学習します。 Mar 27, 2024 pm 12:39 PM

PHP 開発のプロセスでは、特殊文字の処理が一般的な問題になります。特に文字列処理では、特殊文字がエスケープされることがよくあります。その中でも、特殊文字を一重引用符に変換することは比較的一般的な要件です。これは、PHP では一重引用符が文字列をラップする一般的な方法であるためです。この記事では、PHP での特殊文字変換シングルクォーテーションの扱い方と具体的なコード例を説明します。 PHP では、特殊文字には一重引用符 (')、二重引用符 (")、バックスラッシュ () などが含まれますが、これらに限定されません。

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? May 06, 2024 pm 10:09 PM

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化を制御します。 シリアル化: @JsonIgnore: プロパティを無視します @JsonProperty: 名前を指定します @JsonGetter: get メソッドを使用します @JsonSetter: set メソッドを使用します Deserialization: @JsonIgnoreProperties: プロパティ @ JsonProperty を無視します:名前を指定 @JsonCreator: コンストラクターを使用 @JsonDeserialize: カスタム ロジック

MyBatisアノテーションと動的SQLの操作手順を詳しく解説 MyBatisアノテーションと動的SQLの操作手順を詳しく解説 Feb 18, 2024 pm 03:29 PM

MyBatis アノテーション動的 SQL の使用法の詳細な紹介 MyBatis は、便利な永続化操作を提供する永続化レイヤー フレームワークです。実際の開発では、通常、柔軟なデータ操作を実現するために、ビジネス ニーズに基づいて SQL ステートメントを動的に生成する必要があります。 MyBatis アノテーション動的 SQL は、この要求を満たすように設計されています。

See all articles