我需要创建一个包含国际字符的文件名的网站(在PHP中)。
例如:transportører.php
(注意带有对角线的'o')。
所以我很乐意创建文件,保存并将其上传到Web服务器。然而,每当我链接到这个文件时,一切都会出错。我将使用通常的链接语法:
<a href="transportører.php">My Link Text</a>
单击此类链接后,Web浏览器会尝试导航到不存在的页面:
在此服务器上找不到请求的网址
/transportører.php
。
注意文件名是如何变异的? “transportører.php”中的“ø”字符已经变成了奇怪的“¸”符号(顺便说一句,这不是“A”之后的逗号,而是符号本身的实际组成部分)。
显然有一些翻译在这里,但是什么,为什么,以及如何防止它?
答案 0 :(得分:0)
我认为,这有两个可能的原因:
可能是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)
发生的事情是FileZilla(我的FTP客户端)对象是国际字符。它正在上传期间更改文件名....用“别的东西”替换国际字符。屏幕上的文件名LOOKED正确(当我使用Linux Mint的本机FTP客户端查看网站文件夹时),但基础字符编码不正确。 Web浏览器可以区分,因此没有将我的链接与(变异的)文件名相关联,从而触发错误404.
解决方案简而言之:我使用Linux Mint本机FTP上传我的文件,覆盖FileZilla上传的文件,一切都刚刚开始。
感谢所有提供建议的人......这都是好东西,而不是这个特殊情况下的解决方案。