2009-09-28 78 views
11

所有服务器(* nix,Windows等)上HTML文件的文件名都允许使用哪些字符? 我正在寻找可在所有服务器上工作的“最低公分母”。 用途:我正在命名要公开发布的文件(Mysite.com/My-Page.htm)什么是Web服务器文件名称的合法/允许字符?

例如,空间? _ - 等

例如,我可以有File-Name.htm,File_Name.htm File Name.htm?

显然,这需要与所有服务器和浏览器一起工作。 (IIRC,名称受限于服务器而不是浏览器,但我可能是错的)。

+0

文件名仅受服务器的底层操作系统和文件系统的限制。例如,在* nix框中,允许除“/”和null之外的任何字符。 你真的在问关于文件名的问题,还是你在问关于文件名的链接或者引用了URL? – 2009-09-28 17:40:26

回答

18

在文件名中所允许的HTML文件在服务器上的什么角色?

这完全取决于服务器。 HTTP本身允许任何字符,包括控制字符和非ASCII字符,只要在URL中请求时适当地进行%编码即可。

在Unix服务器上,您不能使用'/'或零字节。 (如果你可以使用它们,它们将分别以'%2F'和'%00'的形式出现在URL中。)你也不能具有特定的文件名'。'或'..',或者空字符串。

在Windows服务器上,你有Unix服务器的所有限制,再加上你也不能使用任何\/:*?"<>|或控制字符1-31,你不能有前导或尾随点或空格,使用任何传统设备文件名(CON,PRN,COM1等等)都会遇到困难。

这与HTTP无关;在Windows上文件名是如何工作的,即complicated

我可以有File-Name.htm,File_Name.htm File Name.htm吗?

当然可以。但在过去的情况下,你应该URL编码的空间链接到它:

<a href="File%20Name.htm">thingy</a> 

浏览器通常会让你逃脱留下的空间,但它是不是真的有效。如果您想避免考虑URL转义,HTML转义和区分大小写问题,请坚持a-z,0-9和下划线。

+1

也许还可以将A-Z添加到_stick to_-phrase。 – 2014-03-21 14:21:05

0

有没有这样的事情作为一个HTML文件名。
某些字符必须用html编码(例如,如果用在链接中),但文档名称中允许的字符将取决于Web服务器(可能还有服务器上的文件系统)。

0

任何文件名将是URL-encoded所以你应该没问题。记录下你的三个文件名都可以正常工作。

1

如果你不想让你的文件名被服务器编码,你应该避免保留字符:$ & +,/:; =?@和不安全字符:空格,引号,<>#%{} | \ ^〜[]`

但正如前面的答案所述,Web服务器应该通过对字符进行编码来处理任何想要使用的内容。

2

一定要消除

* . "/\ [ ] : ; | = ,

这是绝不允许,由于在文件中不一致的命名约定标准的做法是使用A-Z和0-9和下划线。大多数用户都需要空间,但如果您可以避免使用它,解析问题可以提高可靠性,您可以阅读mime(多部分Internet邮件扩展)上的rfc以了解所涉及的内容。

不管你做什么,某处某处都可能会使生活变得困难 - 以至于我现在使用加密方法生成随机的a-z小写字符串并将它们用作文件名,将有用信息嵌入到文件源代码中。

避免不惜任何代价的符号,...

+0

在面值这是一个不正确的答案。除“/”外,您提到的所有字符都是类Unix系统上的文件名的有效字符。不一定要使用它们,但它们是有效的。 – 2009-09-28 17:42:45

+0

像Jim说的那样,服务器流量应该编码URL中不允许的任何内容 - 一个主要的例子是空间应该是%20,但是你看到的是空间的+,这也是用于+ so的字符我的意见不是那么卑微),这种情况恰恰相反,当一只猫已经拥有它时,它就会追赶它。 – 2009-09-28 17:43:11

+0

是的,布赖恩 - 它简短而便宜。这只是我删除的第一件事情,因为即使{[%%%]}。ext使其跨服务器跃点,它也会在fp *中混淆char [256]。 (更不用说嵌入的空值等)曾经看到崩溃的操作系统与文件名中的点运算符? – 2009-09-28 17:46:39

0

我要说的经验为文件名的HTML文件的所有服务器上的一个很好的规则可以是字母(小写优先)和数字字符(1虽然9)的任意组合,加上下划线(_),减号( - )或加号(+)字符但不包含空格。另外,用dot html结束文件名(例如filename.html)。我个人避免使用下划线和加号字符。

相关问题