Rumah php教程 php手册 Content-Disposition非英文下的处理注解

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

Jun 06, 2016 pm 08:13 PM
content-disposition r berurusan dengan anotasi Inggeris

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
Salin selepas log masuk

但是,等等,这还没完 还是那个<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'));
Salin selepas log masuk

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

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Proses operasi hos perkhidmatan WIN10 yang menduduki terlalu banyak CPU Proses operasi hos perkhidmatan WIN10 yang menduduki terlalu banyak CPU Mar 27, 2024 pm 02:41 PM

1. Mula-mula, kita klik kanan ruang kosong bar tugas dan pilih pilihan [Task Manager], atau klik kanan logo mula, dan kemudian pilih pilihan [Task Manager]. 2. Dalam antara muka Pengurus Tugas yang dibuka, kami klik tab [Perkhidmatan] di hujung kanan. 3. Dalam tab [Perkhidmatan] yang dibuka, klik pilihan [Buka Perkhidmatan] di bawah. 4. Dalam tetingkap [Services] yang terbuka, klik kanan perkhidmatan [InternetConnectionSharing(ICS)], dan kemudian pilih pilihan [Properties]. 5. Dalam tetingkap sifat yang terbuka, tukar [Buka dengan] kepada [Disabled], klik [Apply] dan kemudian klik [OK]. 6. Klik logo mula, kemudian klik butang tutup, pilih [Mulakan Semula], dan selesaikan mula semula komputer.

Bagaimanakah anotasi digunakan untuk kaedah ujian dalam rangka kerja JUnit? Bagaimanakah anotasi digunakan untuk kaedah ujian dalam rangka kerja JUnit? May 06, 2024 pm 05:33 PM

Anotasi dalam rangka kerja JUnit digunakan untuk mengisytiharkan dan mengkonfigurasi kaedah ujian Anotasi utama termasuk: @Ujian (pengisytiharan kaedah ujian), @Sebelum (kaedah dijalankan sebelum kaedah ujian dilaksanakan), @Selepas (kaedah dijalankan selepas kaedah ujian. dilaksanakan), @ BeforeClass (kaedah yang dijalankan sebelum semua kaedah ujian dilaksanakan), @AfterClass (kaedah yang dijalankan selepas semua kaedah ujian dilaksanakan), anotasi ini membantu mengatur dan memudahkan kod ujian dan meningkatkan kebolehpercayaan kod ujian dengan menyediakan niat dan konfigurasi yang jelas.

Bagaimana untuk menukar Google Chrome kepada mod Cina? Bagaimana untuk menukar Google Chrome kepada mod Cina? Mar 13, 2024 pm 07:31 PM

Bagaimana untuk menukar bahasa Cina kepada bahasa Inggeris dalam Google Chrome? Sesetengah rakan ingin menetapkan Google Chrome kepada bahasa Inggeris supaya mereka boleh terus meningkatkan bahasa Inggeris mereka semasa digunakan. Jadi bagaimana untuk menetapkannya kepada bahasa Inggeris? Google Chrome adalah bahasa Cina secara lalai. Di bawah, saya akan menunjukkan kepada anda cara menetapkan bahasa Google Chrome kepada bahasa Inggeris. Langkah menetapkan: 1. Buka [Google Chrome], seperti yang ditunjukkan dalam rajah di bawah. 2. Klik menu [tiga titik] di penjuru kanan sebelah atas antara muka Google Chrome, seperti yang ditunjukkan dalam rajah di bawah. 3. Selepas memasuki halaman menu, cari [Settings], seperti yang ditunjukkan dalam rajah di bawah. 4. Selepas memasuki halaman tetapan, klik pilihan [Bahasa], seperti yang ditunjukkan dalam rajah di bawah. 5. Pilih [Tambah Bahasa] dalam antara muka bahasa, seperti yang ditunjukkan dalam rajah di bawah.

Dokumentasi Kod Raja PHP: Panduan Lanjutan untuk PHPDoc Dokumentasi Kod Raja PHP: Panduan Lanjutan untuk PHPDoc Mar 02, 2024 am 08:43 AM

Pengenalan: PHPDoc ialah standard ulasan untuk kod PHP yang menghasilkan dokumentasi yang mudah difahami dan bermaklumat. Dengan menggunakan tag ulasan khusus, PHPDoc membenarkan pembangun memberikan butiran penting tentang fungsi, kelas, kaedah dan elemen kod lain. Panduan lanjutan ini melihat secara mendalam pada PHPDoc, menunjukkan keupayaannya dan menyediakan strategi dokumentasi yang berkesan. Sintaks dan teg: Komen PHPDoc bermula dengan garis miring berganda (//) atau komen berbilang baris (/**/). Berikut ialah beberapa teg anotasi biasa: @param: Mentakrifkan parameter fungsi atau kaedah. @return: Menentukan nilai pulangan fungsi atau kaedah. @throws: Menerangkan pengecualian yang mungkin dilemparkan oleh fungsi atau kaedah. @var: mentakrifkan atribut atau kejadian kelas

Panduan ringkas untuk manipulasi fail CSV Panduan ringkas untuk manipulasi fail CSV Dec 26, 2023 pm 02:23 PM

Ketahui cara membuka dan memproses fail format CSV dengan pantas Dengan pembangunan analisis dan pemprosesan data yang berterusan, format CSV telah menjadi salah satu format fail yang digunakan secara meluas. Fail CSV ialah fail teks yang ringkas dan mudah dibaca dengan medan data berbeza yang dipisahkan dengan koma. Sama ada dalam penyelidikan akademik, analisis perniagaan atau pemprosesan data, kami sering menghadapi situasi di mana kami perlu membuka dan memproses fail CSV. Panduan berikut akan menunjukkan kepada anda cara belajar membuka dan memproses fail format CSV dengan cepat. Langkah 1: Fahami format fail CSV Pertama,

Ketahui cara mengendalikan aksara khas dan menukar petikan tunggal dalam PHP Ketahui cara mengendalikan aksara khas dan menukar petikan tunggal dalam PHP Mar 27, 2024 pm 12:39 PM

Dalam proses pembangunan PHP, berurusan dengan aksara khas adalah masalah biasa, terutamanya dalam pemprosesan rentetan, aksara khas sering terlepas. Antaranya, menukar aksara khas kepada petikan tunggal adalah keperluan yang agak biasa, kerana dalam PHP, petikan tunggal adalah cara biasa untuk membungkus rentetan. Dalam artikel ini, kami akan menerangkan cara mengendalikan petikan tunggal penukaran aksara khas dalam PHP dan memberikan contoh kod khusus. Dalam PHP, aksara khas termasuk tetapi tidak terhad kepada petikan tunggal ('), petikan berganda ("), segaris ke belakang (), dsb. Dalam rentetan

Penjelasan terperinci tentang langkah operasi anotasi MyBatis dan SQL dinamik Penjelasan terperinci tentang langkah operasi anotasi MyBatis dan SQL dinamik Feb 18, 2024 pm 03:29 PM

Pengenalan terperinci kepada penggunaan SQL MyBatis anotasi dinamik MyBatis ialah rangka kerja lapisan kegigihan yang memberikan kami operasi kegigihan yang mudah. Dalam pembangunan sebenar, biasanya diperlukan untuk menjana pernyataan SQL secara dinamik berdasarkan keperluan perniagaan untuk mencapai operasi data yang fleksibel. SQL dinamik anotasi MyBatis direka untuk memenuhi permintaan ini.

Bagaimanakah anotasi dalam perpustakaan Jackson mengawal pensirilan dan penyahsirilan JSON? Bagaimanakah anotasi dalam perpustakaan Jackson mengawal pensirilan dan penyahsirilan JSON? May 06, 2024 pm 10:09 PM

Anotasi dalam perpustakaan Jackson mengawal pensirilan dan penyahserilangan JSON: Pensirilan: @JsonIgnore: Abaikan harta @JsonProperty: Tentukan nama @JsonGetter: Gunakan kaedah get @JsonSetter: Gunakan kaedah yang ditetapkan Deserialization: @JsonIgnoreProperties: Abaikan harta @ JsonProperty: Nyatakan nama @JsonCreator: Gunakan pembina @JsonDeserialize: Logik tersuai

See all articles