我正在使用PHP 5.6,Apache2.4和Mysql在Ubuntu服务器16.04上工作。我有一个希腊语的joomla网站(3.8),下载的文件有一个奇怪的问题。尽管charset的所有配置都是“ utf-8”(apache,php,服务器语言环境,joomla语言),但是当我尝试下载具有希腊文件名的文件时,由于apache(?)“剪切”了文件的第一个字母。例如,上传的文件名是“Κ1234_ΒΓΔ”,而下载的文件名是“1234_ΒΓΔ”。对这个问题/错误有什么想法吗?
预先感谢
答案 0 :(得分:0)
文件名通过HTTP标头发送到客户端。标头可能包含编码信息,因此,您不能确定浏览器会在标头结束之前对其进行编码。
使用此测试代码:
<?php
header("Content-type:application/octet-stream");
header("Content-Disposition:attachment;filename=testΔ.txt");
echo 1;
?>
在我的测试Firefox中(正确)使用UTF8对文件名进行了编码,但是Internet浏览器使用了iso8859-1。
答案 1 :(得分:0)
最后,我找到了解决方案...问题出在用于下载文件的自定义php代码中,特别是问题出在“ pathinfo()”函数中。当您解析utf-8路径/文件名并且解决方案是在使用pathinfo()之前插入时,此功能无法正常工作:
setlocale(LC_ALL,'*your_lang*.UTF-8');
like setlocale(LC_ALL,'en_US.UTF-8');