Wordpress / Apache - 图像文件名中包含unicode字符的404错误

时间:2012-08-30 15:56:33

标签: wordpress apache unicode

我们最近将一个网站迁移到了一个新的服务器,并且遇到了一个奇怪的问题,其中一些文件名中带有unicode字符的上传图片给我们带来了404错误。

通过ssh / FTP,我们可以看到文件肯定存在。

例如:

http://sjofasting.no/project/adnoy

没有图像正常工作:

代码:

<img class='image-display' title='' src='http://sjofasting.no/wp/wp-content/uploads/2012/03/ådnøy_1_2.jpg' width='685' height='484'/>

SSH:

  

-rw-r - r-- 1 xxxxxxxx xxxxxxxx 836813 8月3日16:12ådnøy_1_2.jpg

同样奇怪的是,如果你导航到目录,你甚至可以点击图像,它可以工作:

http://sjofasting.no/wp/wp-content/uploads/2012/03/

点击'ådnøy_1_2.jpg'即可。

不知何故wordpress正在生成

  

http://sjofasting.no/wp/wp-content/uploads/2012/03 /ådnøy_1_2.jpg

并从直接文件夹浏览正在生成

  

http://sjofasting.no/wp/wp-content/uploads/2012/03/a%CC%8Adn%C3%B8y_1_2.jpg

发生了什么事?


编辑:

如果我从wordpress源复制图像网址,我会得到:

http://sjofasting.no/wp/wp-content/uploads/2011/11/Bore-Strand-Hotellg%C3%A5rd-12.jpg

从apache浏览器复制后,我得到:

http://sjofasting.no/wp/wp-content/uploads/2011/11/Bore-Strand-Hotellga%cc%8ard-12.jpg

有什么可以解释这种差异: %C3%A5和%cc%8

...

1 个答案:

答案 0 :(得分:11)

Unicode规范化。

0xC3 0xA5是U + 00E5 a-with-ring的UTF-8编码。

0xCC 0x8A是U + 030A组合环的UTF-8编码。

U + 0035是写作A环的组合(正常形式C)方式;一个a字母后跟U + 030A是分解(正常形式D)的写作方式。 å vs å - 它们看起来应该相同,但根据字体渲染情况可能略有不同。

现在通常情况并不重要,因为合理的文件系统会让它们保持不变。如果您保存名为[char U+00E5].txtå.txt)的文件,则会在Windows和Linux下保留该文件。

另一方面,Macs是疯了。文件系统更喜欢普通形式D,只要你传入它的任何组合字符转换成分解的字符。如果您将一个文件放在名为[char U+00E5].txt的文件中并立即列出该目录,您会发现您实际上有一个名为a[char U+030A].txt的文件。您 仍然可以在Mac上以[char U+00E5].txt的形式访问该文件,因为它在查找之前也会将该输入转换为Normal Form D,但您无法恢复与你输入的字符序列术语相同的文件名:它是一个有损转换。

因此,如果您将文件保存在Mac上,然后转移到[char U+00E5].txta[char U+030A].txt引用不同文件的文件系统,则会出现链接损坏。

更新页面以指向URL的Normal Form D版本,或者从文件系统重新上传文件,这些文件系统不会严重损坏Unicode字符。

认为不同,导致奇怪的互操作性问题。