Мы храним кучу странных имен документов на нашем веб-сервере (люди загружают их), которые имеют разные символы, такие как пробелы, амперсанды и т. Д. Когда мы создаем ссылки на эти документы, нам нужно убежать от них, чтобы сервер мог искать файл по его необработанному имени в базе данных. Однако ни одна из встроенных функций escape-функции .NET не будет работать правильно во всех случаях.Как правильно вывести имя документа в .NET?
Возьмите документ Hello#There.docx
:
UrlEncode
будет правильно обращаться с этим:
HttpUtility.UrlEncode("Hello#There");
"Hello%23There"
Однако UrlEncode
будет не ручка Hello There.docx
правильно:
HttpUtility.UrlEncode("Hello There.docx");
"Hello+There.docx"
+
символ действителен только для параметров URL, а не d имена ocument. Интересно, что это действительно работает на тестовом веб-сервере Visual Studio, но не на IIS.
UrlPathEncode
функция отлично работает для пространств:
HttpUtility.UrlPathEncode("Hello There.docx");
"Hello%20There.docx"
Однако, он не избежит другие символы, такие как #
характер:
HttpUtility.UrlPathEncode("Hello#There.docx");
"Hello#There.docx"
Эта ссылка недействительна как #
интерпретируется как хэш URL-адресов и даже не попадает на сервер.
Есть ли способ утилиты .NET для удаления всех не-буквенно-цифровых символов в имени документа, или мне нужно написать свой собственный?
Как вы обрабатываете дубликаты, если пользователи загружают файлы с тем же именем? Не проще ли было бы машинное генерирование имен (например, guid, например) и сохранить дружественное, предоставленное пользователем имя в базе данных (вместе с сгенерированным именем файла)? –
Вы, наверное, нужно что-то вроде этого [Удалить недопустимые символы из пути и имена файлов] [1] [1]: http://stackoverflow.com/questions/146134/how-to-remove-illegal-characters -from-path-and-filenames –
@KirkWoll - Хороший вопрос :) URL * на самом деле * выглядит как '/ Docs/12345/My File.docx' - 12345 - это уникальный ключ, но мы хотим, чтобы IE« Сохранить как » ", чтобы сохранить файл с тем же именем, что и первоначально загруженный. Мы также проверяем соответствие имени файла ключевому слову, чтобы люди не могли просто угадать случайные документы (да, не на 100% безопасно, но достаточно хорошо). –