首页 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 Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

WIN10服务主机太占cpu的处理操作过程 WIN10服务主机太占cpu的处理操作过程 Mar 27, 2024 pm 02:41 PM

1、首先我们右击任务栏空白处,选择【任务管理器】选项,或者右击开始徽标,然后再选择【任务管理器】选项。2、在打开的任务管理器界面,我们点击最右端的【服务】选项卡。3、在打开的【服务】选项卡,点击下方的【打开服务】选项。4、在打开的【服务】窗口,右击【InternetConnectionSharing(ICS)】服务,然后选择【属性】选项。5、在打开的属性窗口,将【打开方式】修改为【禁用】,点击【应用】后点击【确定】。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格式成为了广泛使用的文件格式之一。CSV文件是一种简单且易于阅读的文本文件,其以逗号分隔不同的数据字段。无论是在学术研究、商业分析还是数据处理方面,都经常会遇到需要打开和处理CSV文件的情况。下面的指南将向您介绍如何快速学会打开和处理CSV格式文件。步骤一:了解CSV文件格式首先,

JUnit框架中注解如何用于测试方法? JUnit框架中注解如何用于测试方法? May 06, 2024 pm 05:33 PM

JUnit框架中的注解用于声明和配置测试方法,主要注解包括:@Test(声明测试方法)、@Before(测试方法执行前运行的方法)、@After(测试方法执行后运行的方法)、@BeforeClass(所有测试方法执行前运行的方法)、@AfterClass(所有测试方法执行后运行的方法),这些注解有助于组织和简化测试代码,并通过提供明确的意图和配置来提高测试代码的可读性和可维护性。

谷歌浏览器如何把中文改成英文模式? 谷歌浏览器如何把中文改成英文模式? Mar 13, 2024 pm 07:31 PM

  谷歌浏览器如何把中文改成英文?一些小伙伴想要将谷歌浏览器设置为英文,这样就能够在使用过程中不断的提高自己的英文了。那么设置为英文该如何操作呢?谷歌浏览器默认是中文的,下面小编给大家带来谷歌浏览器设置语言为英文的方法,一起来看看吧。  设置步骤  1、打开【谷歌浏览器】,如下图所示。  2、点击谷歌浏览器右上角界面【三点】菜单,如下图所示。  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:使用获取方法@JsonSetter:使用设置方法反序列化:@JsonIgnoreProperties:忽略属性@JsonProperty:指定名称@JsonCreator:使用构造函数@JsonDeserialize:自定义逻辑

详解MyBatis注解与动态SQL的操作步骤 详解MyBatis注解与动态SQL的操作步骤 Feb 18, 2024 pm 03:29 PM

MyBatis注解动态SQL的使用方法详解IntroductiontotheusageofMyBatisannotationdynamicSQLMyBatis是一个持久层框架,为我们提供了便捷的持久化操作。在实际开发中,通常需要根据业务需求来动态生成SQL语句,以实现灵活的数据操作。MyBatis注解动态SQL正是为了满足这一需求而设计的,本

See all articles