Каковы права/Разрешенные символы для имен файлов веб-сервера?

Какие символы разрешены в именах файлов для HTML файлов на ВСЕХ серверах (* nix, Windows и т.д.)? Я ищу "самый низкий общий знаменатель", который будет работать на всех серверах. ИСПОЛЬЗОВАНИЕ: Я пишу файл, который будет публиковаться публично (Mysite.com/My-Page.htm)

Например, пробел? _ - и т.д.

Например, могу ли я использовать File-Name.htm, File_Name.htm File Name.htm?

Очевидно, что это необходимо для работы со всеми серверами и браузерами. (IIRC, имя ограничено сервером, а не браузером, но я могу ошибаться).

Ответ 1

Какие символы разрешены в именах файлов для файлов HTML на серверах?

Это полностью зависит от сервера. Сам HTTP разрешает любой символ вообще, включая управляющие символы и символы, отличные от ASCII, если они соответствующим образом% -кодированы по запросу в URL-адресе.

На сервере Unix вы не можете использовать '/или нулевой байт. (Если вы можете использовать их, они будут отображаться в URL как "% 2F и" % 00 соответственно.) У вас также не могут быть определенные имена файлов ". или '.., или пустую строку.

На сервере Windows у вас есть все ограничения на сервере Unix, плюс вы также не можете использовать какой-либо из \/:*?"<>| или управляющих символов 1-31, и вы не можете иметь ведущую или конечную точку или пробелы, а вы 'будет трудно использовать какие-либо имена файлов устаревших устройств (CON, PRN, COM1 и многие другие).

Это не связано с HTTP; как работают имена файлов в Windows, сложный.

Могу ли я использовать File-Name.htm, File_Name.htm File Name.htm?

Конечно. Но в последнем случае вы должны ссылаться на него путем URL-кодирования пространства:

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

Браузеры обычно позволят вам уйти, оставив пространство, но это действительно не так. Если вы не хотите думать об экранировании URL-адресов, проблемах с экранированием HTML и чувствительных к регистру вопросов, придерживайтесь a-z, 0-9 и подчеркивания.

Ответ 2

Обязательно устраните

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

которые никогда не разрешены, из-за несоответствий в стандартах использования имен файлов стандартная практика заключается в использовании a-z и 0-9 и символа подчеркивания. Пространство необходимо большинству пользователей, но если вы можете уйти от его использования, возникают проблемы с синтаксическим разбором, которые повышают надежность, вы можете прочитать rfc на mime (многостраничные расширения электронной почты Интернета), чтобы получить представление о том, что задействовано.

Независимо от того, что вы делаете, что-то где-то может осложнить жизнь - настолько, что теперь я использую криптографические методы для генерации случайных строчных строчек az и использую их как имена файлов, вставляя полезную информацию в исходный код файла.

Избегайте амперсанда любой ценой,...

Ответ 3

Если вы не хотите, чтобы ваши имена файлов были закодированы сервером, вам следует избегать зарезервированных символов: $& +,/:; =? @и небезопасные символы: пробел, кавычки, < > #% { } |\^ ~ [] `

Но, как указывалось в предыдущих ответах, веб-серверы должны справляться с тем, что вы хотите использовать, кодируя символы.

Ответ 4

Существует не такая вещь, как имя файла html.
Некоторые символы должны быть закодированы в html (например, если они используются в ссылках), но допустимые символы в именах документов будут зависеть от веб-сервера (и, возможно, файловой системы на сервере).

Ответ 5

Любое имя файла будет URL-encoded, поэтому вы должны быть в порядке. И для записи все три имени вашего файла будут работать нормально.

Ответ 6

Я бы сказал, что правильное правило для имен файлов для файлов HTML на ВСЕХ серверах может быть любой комбинацией алфавита (предпочтительным для нижнего регистра) и числовых символов (1 хотя и 9), плюс подчеркивание (_), минус (-) или плюс (+), но без пробелов. Кроме того, завершите имя файла с помощью точки html (например, filename.html). Я лично избегаю использовать символы подчеркивания и плюс.