Nginx - 变音符号为 ä ö ü 的文件不会显示在浏览器中



我使用的是带有PHP 5.5.1和Nginx 1.6.2的Linux Debian WheezY,并搜索打开带有德语元音变音符的文件的解决方案,例如vögel.jpg或带有德语元音变音符的目录中的文件,但只显示错误404 Not Found Nginx/1.6.2。

如果我用f6(öISO-8859-1和ascii)而不是vögel.jpg键入v%f6gel.jpg,它会起作用,并且文件会显示在浏览器窗口中。

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

我的Nginx设置是:

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

charset和source_charset是根据Nginx主页确定的,将charset utf-8添加到"内容类型"响应标头中,但我不知道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字符集映射,则没有任何变化:

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也没有改变。

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

即使没有nginx字符集,一切都保持不变。有人知道这个问题的解决方案吗?或者nginx根本不可能在文件名中使用元音变音符吗?非常感谢

检查php.ini文件中的default_charset = "UTF-8"行,使php文件默认使用该字符集

检查文件名的编码方式。

$ LC_ALL=C ls --quoting-style=c v*
"v303266gel.jpg"  "v366ogel.jpg"

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

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

相关内容

最新更新