我需要使用菜单中的链接从我的网页打开/下载文件。我的问题是当我尝试使用 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。
我绝对需要将重音保留在文件名中。有人有想法吗?
答案 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中的另一个示例
要处理此问题,服务器端需要在使用字符串之前以相同的Unicode规范化形式保留字符串。而且最好避免在URL中使用这些字符
答案 3 :(得分:-1)
您不能在网址中添加重音字符。只允许使用ASCII字符。请在http://tools.ietf.org/html/rfc3986#section-2
查看更多信息可以重写URL以处理带重音的字符,遗憾的是我没有抓到URL重写,所以我不能为你提供 - 但它是可能的。