Переведите URL в правильное имя файла и вернитесь в URL - PullRequest
4 голосов
/ 12 декабря 2010

Мне нужно хранить некоторую информацию, уникальную для каждого сайта, к которому получают доступ мои пользователи.(На самом деле это эскиз сайта, на который он смотрел.)Этот эскиз (файл jpeg) должен иметь имя, указывающее, какой сайт он представляет, чтобы его можно было просмотреть позже.

Можете ли вы порекомендовать простой перевод URL-адреса на действительное имя файла и обратно?

Пример: www.ibm.com может быть сопоставлен с www_ibm_com.

Я не уверен, что это всегда будет работать со всеми действительными URL-адресами, в некоторых случаях URL-адреса имеют очень сложные строки запроса.Есть ли хорошая библиотека регулярных выражений или c #, которую можно использовать?

Заранее спасибо и будьте счастливы.

Ответы [ 2 ]

2 голосов
/ 12 декабря 2010

Во-первых, стоит указать, что "."вполне допустимо в именах файлов, но "/" - нет, поэтому, хотя приведенный вами пример не нуждается в переводе, "www.ibm.com/path1/file1.jpg" будет.

Простойstring.Replace было бы лучшим решением здесь - при условии, что вы можете найти символ, который является допустимым в имени файла, но недопустимым в URL.

Если предположить, что недопустимым символом URL является «§» (что может быть допустимо вURL), тогда у вас есть:

string.Replace("/", "§");

для перевода в имя файла и:

string.Replace("§", "/");

для перевода обратно.

Этостраница на URL-кодировке определяет допустимые, недействительные и небезопасные (допустимые, но имеющие специальное значение) символы для URL-адресов.Символы в «верхней половине» ISO-Latin набора 80-FF hex (128-255 десятичных.) Не являются допустимыми, но могут быть в порядке в именах файлов.

Это необходимо сделать для каждого символав URL, который находится в наборе недопустимых символов имени файла.Вы можете получить это, используя GetInvalidFileNameChars.

ОБНОВЛЕНИЕ

Если предположить, что вы не можете найти подходящие пары символов, тогда другое решение будетиспользовать таблицу поиска.Один столбец содержит URL, другой - сгенерированное имя файла.Пока сгенерированное имя уникально (GUID подойдет), вы можете выполнить двусторонний поиск, чтобы перейти от одного к другому.

1 голос
/ 12 декабря 2010

www.ibm.com на самом деле является допустимым именем файла. Более проблемными являются слэши. Поэтому, если URL содержит подкаталоги, вам необходимо перевести косую черту.

Основная проблема - возможные дубликаты. Например, ibm.com/path1_path2 и ibm.com/path1/path2 будут переводиться в одно и то же значение.

Мне нравится предложение ChrisF найти символ, который является допустимым в именах файлов, но не в URL-адресах, хотя я даже не знаю, какой символ, если он есть, был бы не в моей голове.

Если вы не найдете такого персонажа, вам, возможно, придется придерживаться маловероятного персонажа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...