Nginx - 带有变音符号äöü的文件未显示在浏览器中

时间:2015-02-21 18:21:13

标签: php nginx

我正在使用Linux Debian WheezY和PHP 5.5.1以及Nginx 1.6.2并搜索打开带有德语变音符号的文件的解决方案,例如vögel.jpg或带有德语变音符号的目录中的文件,但它出现了只有错误404 Not Found nginx / 1.6.2。

如果我用f6(öISO-8859-1和ascii)而不是vögel.jpg键入v%f6gel.jpg,它就可以工作,文件显示在Browserwindow中。

如果我用%C3%B6(öUTF-8)而不是vögel.jpg键入v%C3%B6gel.jpg,则文件名将在url字段中设置为vögel.jpg,并且不会显示任何内容。

我的Nginx设置为:

source_charset utf-8;
charset utf-8;
override_charset on;

charset和source_charset根据Nginx homepage确定将charset utf-8添加到“Content-Type”响应头,但是,我不知道是否为jpg文件使用了响应头。

如果使用ascii或ISO-8859-1或其他字符集而不是utf-8,则问题保持不变:

source_charset iso-8859-1;
charset iso-8859-1;

source_charset utf-8;
charset iso-8859-1;

如果包括nginx charset maps没有任何变化:

include koi-utf;
include koi-win;
include win-utf;

这样看似没有影响:

source_charset ascii;
charset utf-8;
override_charset on;
charset_map ascii utf-8 {
    f6  c3b6;
}

charset_map iso-8859-1 utf-8 {
    f6  c3b6;
}

charset_map utf-8 ascii {
    c3b6    f6;
}

nginx错误:无效值“c3b6”

charset_map utf-8 iso-8859-1 {
    c3b6    f6;
}

nginx错误:无效值“c3b6”

我的nginx fastcgi设置

location ~ \.php$ {

fastcgi_split_path_info ^(.+\.php)(/.+)$;
try_files $uri $uri/ =404;

fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

whithout fastcgi也没有变化。

根据PHP使用echo mb_detect_encoding($ filename); jpg文件编码是ascii,但如果我将其更改为utf-8,则无法在浏览器中打开jpg文件,如下所示:vögel.jpg

即使没有nginx字符集,一切都保持不变。有谁知道这个问题可能是什么解决方案,还是nginx根本不可能在文件名中使用变音符号?非常感谢

2 个答案:

答案 0 :(得分:0)

检查你的php.ini文件中是否有default_charset = "UTF-8"这一行,以使你的php文件默认使用该charset

答案 1 :(得分:0)

检查您的文件名是什么编码。

$ LC_ALL=C ls --quoting-style=c v*
"v\303\266gel.jpg"  "v\366ogel.jpg"

这里首先是UTF-8中的vögel.jpg和ISO-8859-1中的第二个。

如果您有第二个变体,那么您可能需要重命名文件。