在文件名内的 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 中使用字符 #的主要内容,如果未能解决你的问题,请参考以下文章

格式化字符串内的数字[关闭]

如何在python中保存文件,因为url包含“?”字符?

如何使用 Java 中的锚启动文件协议 URL?

使用 PHP 从 URL 字符串中获取文件路径/扩展名 [重复]

linux不知道文件在哪,想查找文件内的字符串

grep与python匹配html文件中引号内的字符串[关闭]