PHP下载文件名乱码问题解决
通过把Content-Type设置为application/octet-stream, 可以把动态生成的内容当作文件来下载,相信这个大家都会。 那么用Content-Disposition设置下载的文件名, 这个也有不少人知道吧。 基本上,下载程序都是这么写的: ?php $filename = "document.txt"; he
通过把Content-Type设置为application/octet-stream, 可以把动态生成的内容当作文件来下载,相信这个大家都会。 那么用Content-Disposition设置下载的文件名, 这个也有不少人知道吧。 基本上,下载程序都是这么写的:
<?php <br />$filename = "document.txt";<br>header('Content-Type: application/octet-stream');<br>header('Content-Disposition: attachment; filename=' . $filename);<br><br>print "Hello!";<br>?>
这样用浏览器打开之后,就可以下载document.txt。
但是,如果$filename是UTF-8编码的,有些浏览器就无法正常处理了。 比如把上面那个程序稍稍改一下:
<?php <br />$filename = "中文 文件名.txt";<br>header('Content-Type: application/octet-stream');<br>header('Content-Disposition: attachment; filename=' . $filename);<br><br>print "Hello!";<br>?>
把程序保存成UTF-8编码再访问,IE6下载的文件名就会乱码。 FF3下下载的文件名就只有“中文”两个字。Opera 9下一切正常。
输出的header实际上是这样子:
Content-Disposition: attachment; filename=中文 文件名.txt
其实按照RFC2231的定义, 多语言编码的Content-Disposition应该这么定义:
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"
即:
- filename后面的等号之前要加 *
- filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。
- 最好加上双引号,否则文件名中空格后面的部分在Firefox中显示不出来
- 注意urlencode的结果与php的urlencode函数结果不太相同,php的urlencode会把空格替换成+,而这里需要替换成%20
经过试验,发现几种主流浏览器的支持情况如下:
IE6 | attachment; filename=" |
FF3 | attachment; filename="UTF-8文件名" |
attachment; filename*="utf8'' |
|
O9 | attachment; filename="UTF-8文件名" |
Safari3(Win) | 貌似不支持?上述方法都不行 |
这样看来,程序必须得这样写才能支持所有主流浏览器:
<?php <br /><br>$ua = $_SERVER["HTTP_USER_AGENT"];<br><br>$filename = "中文 文件名.txt";<br>$encoded_filename = urlencode($filename);<br>$encoded_filename = str_replace("+", "%20", $encoded_filename);<br><br>header('Content-Type: application/octet-stream');<br><br>if (preg_match("/MSIE/", $ua)) {<br> header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');<br>} else if (preg_match("/Firefox/", $ua)) {<br> header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');<br>} else {<br> header('Content-Disposition: attachment; filename="' . $filename . '"');<br>}<br><br>print 'ABC';<br>?><br><br><br><br>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.
