如何在safari中处理带有“é”字符的网址?

时间:2014-01-23 15:22:28

标签: php html url href

我需要使用菜单中的链接从我的网页打开/下载文件。我的问题是当我尝试使用 Safari (7.0.1)打开其中包含“É”的文件时。它适用于Firefox 26.0,Chrome 32.0.17和IE。

网址中的名称是正确的,但未找到错误显示完全不同的名称。

在网址中:FORMULAIRE%20-%20ENVOI%20DE%20MESSAGE%20PAR%20TÉLÉCOPIEUR.doc

页面错误:

  

FORMULAIRE - ENVOI DE MESSAGE PARTÉLÉCOPIEUR.doc未找到   这个服务器。

我尝试了urlencode()rawurlencode()htmlspecialchar(),我的网页字符集设置为UTF-8。

我绝对需要将重音保留在文件名中。有人有想法吗?

4 个答案:

答案 0 :(得分:1)

处理URL中棘手字符的一个方便的解决方法是使用它们的百分比编码值。在这种情况下,我认为您需要通过%C3%89代替É,就像传递%20代替空格一样。

所以试试这个:

FORMULAIRE%20-%20ENVOI%20DE%20MESSAGE%20PAR%20T%C3%89L%C3%89COPIEUR.doc

这听起来像是在Mac上,但是如果你可以访问Windows机器(vm或其他),Fiddler是一款适用于所有HTTP的瑞士军刀,它的工具菜单包括一个“文本向导”这可以帮助大量的文本编码/解码。

答案 1 :(得分:0)

你可能有本地编码的页面,safari里面有一些bug。你需要通过urlencoding来帮助webbrowser,这似乎无法在php中正常工作。您必须手动替换这些字符。这将取决于您的语言环境(它似乎是法语或类似的东西)。请参阅php中的strtr函数,并使用关联数组从您的语言环境中的字符到%xx / %xx%xx表示...这是您唯一能做的事情(除了使用UTF而不是法语编码。)

答案 2 :(得分:0)

Safari也遇到了同样的问题,我们发现根本原因与unicode normalization form

有关
  • 在野生动物园中,它使用NFC规范化形式,因此被规范化为代码点:0019

  • 在chrome中,它使用NFD归一化形式,因此被归一化为2个代码点:0045、0301

wiki中的另一个示例 enter image description here

要处理此问题,服务器端需要在使用字符串之前以相同的Unicode规范化形式保留字符串。而且最好避免在URL中使用这些字符

答案 3 :(得分:-1)

您不能在网址中添加重音字符。只允许使用ASCII字符。请在http://tools.ietf.org/html/rfc3986#section-2

查看更多信息

可以重写URL以处理带重音的字符,遗憾的是我没有抓到URL重写,所以我不能为你提供 - 但它是可能的。