在文件名中使用字符#作为URL

10
我需要在此链接中添加 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以对井号字符#进行编码,并使所有浏览器都能够下载文件?
我无法更改文件名以删除此字符,因此需要处理此问题的方法。

2
在IE8上,使用aaaa_%23_aaaa.msg对我有效。 - Hashem Qolami
1
刚刚测试过:%23 在 Firefox/26、Chrome/32、Opera/12.16 和 Explorer/11(都在 Windows 7 上运行)中都可以正常工作。它在哪个目标浏览器上失败了? - Álvaro González
3
如果我直接把"aaaa_%23_aaaa.msg"放到地址栏里,它是可以工作的,但是当我加上一个锚点,比如<a href="file://attachments/aaaa_%23_aaa.msg">aaaa_#_aaa.msg</a>在IE11中就会尝试打开file://attachments/aaaa_%2523_aaa.msg - ajimenez
我仍然无法复现,尽管我承认我不得不重写URL前缀以使其绝对(file:///C:/attachments/);否则,无论文件名如何,在任何浏览器中都无法正常工作。 - Álvaro González
不,我没有使用任何编码函数,只是在我的asp文件中放置了锚标签,并从数据库检索url。 只有IE11会对'%'进行编码。最终我无法直接解决这个问题,但我已经可以更改源过程以更改文件中的特殊字符。 - ajimenez
显示剩余2条评论
1个回答

2
如果您能够将文件重命名,使其不包含“#”字符,则可以避免许多痛苦。 只要包含该字符,您可能会在当前和未来的跨浏览器问题上遇到困惑,对于未来开发人员在处理您的代码时也会产生困惑(或者在您忘记编码细节的情况下,自己也会感到困惑)。 此外,一些Unix / Linux系统不允许在文件名中使用“#”。 不确定您使用的是哪个操作系统,但您的文件名应尽可能在各种操作系统之间具有可移植性,即使您现在“确定”永远不会在这些系统上运行。

你有相关的参考资料吗?就我所知,# 是一个普通的 US-ASCII 字符,在我所知道的任何 Unix 文件系统中都没有任何特殊含义。并且将其编码为 URL 是很简单的(不像其他 Unicode 字符在 Latin1 和 UTF-8 中有不同的编码)。 - Álvaro González
@Álvaro G. Vicario,我没有参考资料;我记得在某些UNIX版本上无法使用“#”。由于它在URL中具有特殊含义,并且在某些编程语言中是注释标识符,因此我避免使用它,并且这对我很有效。例如,我没有遇到像OP一样的任何问题 :) - Steve Schneider
我刚在Fedora 23上使用ext4文件系统创建了一个名为“PO# tralala.pdf”的文件。是的。 - Ray Foss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接