网站文件名中的国际字符

时间:2018-01-29 16:25:51

标签: html url hyperlink internationalization url-encoding

我需要创建一个包含国际字符的文件名的网站(在PHP中)。

例如:transportører.php(注意带有对角线的'o')。

所以我很乐意创建文件,保存并将其上传到Web服务器。然而,每当我链接到这个文件时,一切都会出错。我将使用通常的链接语法:

<a href="transportører.php">My Link Text</a>

单击此类链接后,Web浏览器会尝试导航到不存在的页面:

  

在此服务器上找不到请求的网址/transportører.php

注意文件名是如何变异的? “transportører.php”中的“ø”字符已经变成了奇怪的“¸”符号(顺便说一句,这不是“A”之后的逗号,而是符号本身的实际组成部分)。

显然有一些翻译在这里,但是什么,为什么,以及如何防止它?

3 个答案:

答案 0 :(得分:0)

我认为,这有两个可能的原因:

html编码

可能是html文件的编码错误,因此该链接实际上指向了错误的路径。添加

<meta charset="UTF-8">

在您文件的head部分。

服务器设置

如果服务器错误地解析了链接(您可以通过在浏览器中键入norwegian-named.php的地址并查看它是否被替换来检查),您需要知道您正在使用哪个服务器并进行调查这个方向。对于apache,How to change the default encoding to UTF-8 for Apache?看起来很有希望。

答案 1 :(得分:0)

由于URL未在超链接中进行百分比编码,因此浏览器假设使用了UTF-8进行百分比编码,其中ø变为%C3%B8

但是,您的服务器似乎期望/使用ISO 8859-1(而不是UTF-8),其中ø变为%F8

快速修复将链接到ISO 8859-1百分比编码的URL:

<a href="transport%F8rer.php">transportører</a>

(更好的解决方法是让您的服务器使用UTF-8进行所有操作,然后在超链接中使用UTF-8百分比编码的URL。)

¹默认情况下,或者因为链接页面似乎使用UTF-8(至少根据HTTP标头Content-Type: text/html; charset=UTF-8)。

答案 2 :(得分:0)

嗯,这很令人尴尬。一切都是 - 实际上 - 正常工作。 404错误使文件名LOOK“错误” - 例如transportører.php。但是,这实际上是正确的。这就是HTML似乎在“幕后”引用文件的方式。所以对于浏览器,“transportører.php”是“transportører.php”的同义词

发生的事情是FileZilla(我的FTP客户端)对象是国际字符。它正在上传期间更改文件名....用“别的东西”替换国际字符。屏幕上的文件名LOOKED正确(当我使用Linux Mint的本机FTP客户端查看网站文件夹时),但基础字符编码不正确。 Web浏览器可以区分,因此没有将我的链接与(变异的)文件名相关联,从而触发错误404.

解决方案简而言之:我使用Linux Mint本机FTP上传我的文件,覆盖FileZilla上传的文件,一切都刚刚开始。

感谢所有提供建议的人......这都是好东西,而不是这个特殊情况下的解决方案。