在文件名内的 URL 中使用字符 #
Posted
技术标签:
【中文标题】在文件名内的 URL 中使用字符 #【英文标题】:Use character # in URL inside file name 【发布时间】:2014-02-26 21:03:24 【问题描述】:我需要与此href="file://attachments/aaaa_#_aaaa.msg"
建立链接
显然这种方式不起作用,因为哈希字符 #
用于锚点。
所以我尝试将其更改为:href="file://attachments/aaaa_%23_aaaa.msg"
但是当我在 IE 中打开 url 时,浏览器正在尝试打开这个:href="file://attachments/aaaa_%2523_aaaa.msg"
IE 将%
字符编码为%25
如何将文件名放在 URL 中进行编码并在所有浏览器中读取哈希字符 #
以下载文件?
我无法更改文件名来删除这个字符,所以我需要一种方法来处理这个问题。
【问题讨论】:
在 IE8 上使用aaaa_%23_aaaa.msg
为我工作。
刚刚测试过:%23
适用于 Firefox/26、Chrome/32、Opera/12.16 和 Explorer/11(均在 Windows 7 上运行)。它失败的目标浏览器是什么?
如果我把这个“aaaa_%23_aaaa.msg”直接放到地址栏是可以的,但是当我把<a href="file://attachments/aaaa_%23_aaa.msg">aaaa_#_aaa.msg</a>
这样的锚放在IE11中试图打开file://attachments/aaaa_%2523_aaa.msg
我仍然无法重现,尽管我承认我必须重写 URL 前缀以使其成为绝对 (file:///C:/attachments/
);否则,无论文件名如何,它都无法在任何浏览器中运行。
@user2244596 您的问题是“%”正在被 url 编码,因此它被编码为“%25”,然后 23 被处理为通常的字符。你在使用一些编码功能吗?顺便说一句,我的 IE11 甚至可以通过您的锚标记示例 :)
【参考方案1】:
如果您能够重命名文件以使其不包含“#”字符,您将避免很多很多很多的痛苦。只要他们这样做,您可能会遇到当前和未来的跨浏览器问题,代表未来开发您的代码的开发人员会感到困惑(或者当您忘记编码的来龙去脉时,将来会代表您感到困惑) ) 等。此外,某些 Unix/Linux 系统不允许在文件名中使用“#”。不确定您使用的是什么操作系统,但您的文件名应该尽可能跨操作系统移植,即使您现在“确定”您永远不会在其中一个系统上运行。
【讨论】:
您对此有什么参考吗?据我所知,#
是一个普通的 US-ASCII 字符,在我知道的任何 Unix 文件系统中都没有任何特殊含义。并且在 URL 中对其进行编码很简单(与其他在 Latin1 和 UTF-8 中具有不同编码的 Unicode 字符不同)。
@Álvaro G. Vicario,我没有参考资料;我记得我使用了一些 UNIX 风格并且无法使用“#”。鉴于它在 URL 中具有特殊含义以及在某些编程语言中作为注释标识符,我避免使用它,它对我来说效果很好。例如,我没有遇到任何问题,例如 OP 有:)
我刚刚在 Fedora 23 中使用 ext4 文件系统创建了一个名为“PO# tralala.pdf”的文件。所以是的。以上是关于在文件名内的 URL 中使用字符 #的主要内容,如果未能解决你的问题,请参考以下文章