【问题标题】:International characters in website file names网站文件名中的国际字符
【发布时间】:2018-07-08 09:57:15
【问题描述】:

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

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

所以我很高兴地创建了文件,保存它,然后将它上传到网络服务器。然而,每当我链接到这个文件时,一切都会出错。我将使用通常的链接语法:

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

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

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

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

这里显然发生了某种翻译,但是什么,为什么,以及如何防止它?

【问题讨论】:

  • 您在 html 中定义了哪种编码?

标签: html url hyperlink internationalization url-encoding


【解决方案1】:

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

发生的事情是 FileZilla(我的 FTP 客户端)反对国际字符。它在上传过程中更改了文件名....用“其他”替换了国际字符。屏幕上的文件名看起来正确(当我使用 Linux Mint 的本机 FTP 客户端查看网站文件夹时),但底层字符编码不正确。网络浏览器可以分辨出差异,因此没有将我的链接与(变异的)文件名相关联,从而触发错误 404。

解决方案简而言之:我使用 Linux Mint 本地 FTP 上传我的文件,覆盖 FileZilla 上传的文件,然后一切都变得生动起来。

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

【讨论】:

    【解决方案2】:

    由于 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)。

    【讨论】:

      【解决方案3】:

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

      html编码

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

      <meta charset="UTF-8">
      

      在文件的head 部分中。

      服务器设置

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

      【讨论】:

      • 感谢乔纳森的回复。然而,我不认为是这样。我实际上得到了“404”响应(因为浏览器试图打开一个不存在的文件 - transport_rer.php - 而不是链接的文件 transportører.php。因此甚至没有读取 HTTP 标头。如果如果您想重现故障,请尝试浏览 www.cclnorway.co.uk,然后单击横幅下方水平导航栏中的“transportører”链接?
      • @Nic 好的,我检查过了,看起来您的服务器正在将地址解析为 ascii。我认为您需要更改服务器上的设置。我相应地更新了我的答案。
      猜你喜欢
      • 2010-09-10
      • 2010-12-21
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 2015-09-07
      相关资源
      最近更新 更多