- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我试图下载一个文件,其名称包含中文、日文等语言的字符时……非 ascii……下载的文件名是乱码。如何改正。
我尝试将 charset=UTF-8 放入 Content-type header 属性中,但没有成功。代码如下。
header("Cache-Control: ");// leave blank to avoid IE errors
header("Pragma: ");// leave blank to avoid IE errors
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$instance_name."\"");
header("Content-length:".(string)(filesize($fileString)));
sleep(1);
fpassthru($fdl);
最佳答案
遗憾的是,目前没有一种解决方案适用于所有浏览器。至少有三种“更明显”的方法可以解决这个问题。
a) Content-type: application/octet-stream; charset=utf-8
+ filename=<utf8 byte sequence>
例如filename=Москва.txt
这违反了标准,但 firefox 正确显示了名称。 IE 没有。
b) Content-type: application/octet-stream; charset=utf-8
+ filename=<urlencode(utf8 byte sequence)>
例如filename=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0.txt
这适用于 IE,但不适用于 Firefox。
c) 提供在 rfc 2231 中指定的名称
例如 filename*=UTF-8''%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0.txt
Firefox 再次支持这一点,而 IE 不支持。
要获得更全面的比较,请参阅 http://greenbytes.de/tech/tc2231/
编辑:当我说没有单一的解决方案时,我的意思是通过 header('...')。但是有一些解决方法。
当没有可用的 filename=xyz header 时,浏览器使用 url 路径部分的基本名称。 IE。对于 <a href="test.php/lala.txt">
firefox 和 IE 都提示 lalala.txt
作为文件名。
您可以在您的 php 脚本的实际路径之后附加额外的路径组件(使用 apache 的 httpd 时请参阅 http://httpd.apache.org/docs/2.1/mod/core.html#acceptpathinfo)。
例如。如果您的文档根目录中有一个文件 test.php 并将其请求为 http://localhost/test.php/x/y/z
变量 $_SERVER['PATH_INFO']
将包含 /x/y/z
.
现在,如果你放一个像
<a
href="/test.php/download/moskwa/Москва"
>
Москва
</a>
在您的文档中,您可以获取 download/moskwa/...
部分并开始下载文件。在不发送任何文件名=...信息的情况下,firefox 和 IE 都会建议“正确的”名称。
您甚至可以将它与根据 rfc 2231 发送名称结合起来。这就是为什么我也放了 moskwa
的原因。进入链接。那将是脚本用来查找它应该发送的文件的 id。 IE 忽略 filename*=...
信息并仍然使用 url 的基本名称部分来建议名称。这意味着对于 firefox(以及任何其他支持 rfc 2231 的客户端)id 之后的部分没有意义*但对于 IE(以及其他不支持 rfc 2231 的客户端)它将用于名称建议。
独立示例:
<?php // test.php
$files = array(
'moskwa'=>array(
'htmlentities'=>'Москва',
'content'=>'55° 45′ N, 37° 37′ O'
),
'athen'=>array(
'htmlentities'=>'Αθήνα',
'content'=>'37° 59′ N, 23° 44′ O'
)
);
$fileid = null;
if ( isset($_SERVER['PATH_INFO']) && preg_match('!^/download/([^/]+)!', $_SERVER['PATH_INFO'], $m) ) {
$fileid = $m[1];
}
if ( is_null($fileid) ) {
foreach($files as $fileid=>$bar) {
printf(
'<a href="./test.php/download/%s/%s.txt">%s</a><br />',
$fileid, $bar['htmlentities'], $bar['htmlentities']
);
}
}
else if ( !isset($files[$fileid]) ) {
echo 'no such file';
}
else {
$f = $files[$fileid];
$utf8name = mb_convert_encoding($f['htmlentities'], 'utf-8', 'HTML-ENTITIES');
$utf8name = urlencode($utf8name);
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename*=UTF-8''$utf8name.txt");
header("Content-length: " . strlen($f['content']));
echo $f['content'];
}
*) 这有点像 Stack Overflow 上的此处。此问题的链接显示为
http://stackoverflow.com/questions/2578349/while-downloading-filenames-from-non-english-languages-are-not-getting-displayed
但它也适用于
http://stackoverflow.com/questions/2578349/mary-had-a-little-lamb
重要的部分是id 2578349
关于php - 从非英语语言下载文件名时未正确显示在下载的文件上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2578349/
这个问题已经有答案了: How to do case insensitive string comparison? (23 个回答) 已关闭 3 年前。 用户在我的输入栏中写入“足球”,然后执行第 6
啊,不习惯 javascript 中的字符串。 character_id= + id + correct= + correctOrIncorrect 这就是我需要制作成字符串的内容。如果您无法猜测字符
$(function() { var base_price = 0; CalculatePrice(); $(".math1").on('change', function(e) { Calc
我找不到任何文章回答问题:将Spinnaker部署到Spinnaker将管理的同一Kubernetes集群是否安全/正确?我主要是指生产,HA部署。 最佳答案 我认为Spinnaker和Kuberne
我正在使用MSVC在Windows上从源代码(官方源代码发布,而不是从仓库中)构建Qt5(Qt 5.15.0)。 我正在设置环境。变量,依赖项等,然后运行具有1600万个选项的configure,最后
我需要打印一个包含重复单词的数组。我的数组已经可以工作,但我不知道如何正确计算单词数。我已经知道,当我的索引计数器 (i) 为 49 时,并且当 (i) 想要计数到 50 时,我会收到错误,但我不知道
我正在遵循一个指南,该指南允许 Google map 屏幕根据屏幕尺寸禁用滚动。我唯一挣扎的部分是编写一个代码,当我手动调整屏幕大小时动态更改 True/False 值。 这是我按照说明操作的网站,但
我有一个类“FileButton”。它的目的是将文件链接到 JButton,FileButton 继承自 JButton。子类继承自此以使用链接到按钮的文件做有用的事情。 JingleCardButt
我的 friend 数组只返回一个数字而不是所有数字。 ($myfriends = 3) 应该是…… ($myfriends = 3 5 7 8 9 12). 如果我让它进入 while 循环……整个
这个问题在这里已经有了答案: Is there a workaround to make CSS classes with names that start with numbers valid?
我正在制作一个 JavaScript 函数,当调整窗口大小时,它会自动将 div 的大小调整为与窗口相同的宽度/高度。 该功能非常基本,但我注意到在调整窗口大小时出现明显的“绘制”滞后。在 JS fi
此问题的基本视觉效果可在 http://sevenx.de/demo/bootstrap-carousel/inc.carousel/tabbed-slider.html 获得。 - 如果你想看一看。
我明白,如果我想从函数返回一个字符串文字或一个数组,我应该将其声明为静态的,这样当被调用的函数被返回时,内容就不会“消亡”。 但我的问题是,当我在函数内部使用 malloc 分配内存时会怎样? 在下面
在 mySQL 数据库中存储 true/false/1/0 值最合适(读取数据消耗最少)的数据字段是什么? 我以前使用过一个字符长的 tinyint,但我不确定它是否是最佳解决方案? 谢谢! 最佳答案
我想一次读取并处理CSV文件第一行中的条目(例如打印)。我假设使用Unix风格的\n换行符,没有条目长度超过255个字符,并且(现在)在EOF之前有一个换行符。这意味着它是fgets()后跟strto
所以,我们都知道 -1 > 2u == true 的 C/C++ 有符号/无符号比较规则,并且我有一种情况,我想有效地实现“正确”比较。 我的问题是,考虑到人们熟悉的尽可能多的架构,哪种方法更有效。显
**摘要:**文章的标题看似自相矛盾。 本文分享自华为云社区《Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序》,作者: Jerry Wang 。 文章的标题看似自相矛盾,然而我在“正
我有一个数据框,看起来像: dataDemo % mutate_each(funs(ifelse(. == '.', REF, as.character(.))), -POS) # POS REF
有人可以帮助我使用 VBScript 重新格式化/正确格式化带分隔符的文本文件吗? 我有一个文本文件 ^分界如下: AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^A
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!