Мне нужно принять список имен файлов в строке запроса. т.е.:Разделитель для использования в строке строки запроса
http://someSite/someApp/myUtil.ashx?files=file1.txt|file2.bmp|file3.doc
У вас есть рекомендации по использованию разделителя?
Мне нужно принять список имен файлов в строке запроса. т.е.:Разделитель для использования в строке строки запроса
http://someSite/someApp/myUtil.ashx?files=file1.txt|file2.bmp|file3.doc
У вас есть рекомендации по использованию разделителя?
Если они являются именами файлов, хорошим выбором будет символ, который запрещен именами файлов. Предложения до сих пор включали , | &
, которые обычно разрешены в именах файлов и, следовательно, могут приводить к двусмысленности. /
, с другой стороны, обычно не разрешается, даже в Windows. Это разрешено в URI, и оно не имеет особого значения в строках запроса.
Пример:
http://someSite/someApp/myUtil.ashx?files=file1.txt|file2.bmp|file3.doc
плохо, потому что он может относиться к действительному файлу file1.txt|file2.bmp
.
http://someSite/someApp/myUtil.ashx?files=file1.txt/file2.bmp/file3.doc
однозначно относится к 3 файлам.
Я думаю, что я хотел бы использовать запятые или точки с запятой.
Точка с запятой является допустимой заменой для &, поэтому не является хорошим выбором: «Серия пар разделена амперсандом,« & »или точкой с запятой,«; ». (http://en.wikipedia.org/wiki/Query_string#Structure) – dwynne
Я всегда использовал двойные трубы «||». У меня нет никаких хороших доказательств, подтверждающих, почему это хороший выбор, кроме 10 лет веб-программирования, и это никогда не было проблемой.
Я рекомендовал бы делать каждый файл, свой собственный параметр запроса, т.е.
myUtil.ashx?file1=file1.txt&file2=file2.bmp&file3=file3.doc
Таким образом, вы можете просто использовать стандартный разбор запросов и цикл
+1 стандартный способ сделать несколько значений – bobince
вам нужно перечислить имена файлов в виде строки ли? Большинство языков принимают массивы в строке запроса, так что вы могли бы написать это нравится
http://someSite/someApp/myUtil.ashx?files[]=file1.txt&files[]=file2.bmp&files[]=file3.doc
Если это не так, или вы не можете использовать какую-то другую причину, вы должны придерживаться разделителя, который либо не допускается или необычный в имени файла. Pipe (|) является хорошим, иначе вы могли бы urlencode невидимый персонаж, так как они довольно просты в использовании в кодировании, но сложнее фактически включить в имя файла.
Обычно я использую массивы, когда это возможно, и труба иначе.
опасно предположить | не допускается в именах файлов. Linux допускает любые символы в именах файлов. но в Windows, да, есть несколько конкретных исключений, которые включают |. –
Я бы основывался на ответе MSalters, говоря, что для обобщения лучший разделитель является недопустимым для элементов в списке. Например, если в вашем списке указаны цены, запятая является плохим разделителем, потому что ее можно путать со значениями. По этой причине, как и большинство этих ответов, я думаю, что хороший разделитель общего назначения, вероятно, «|» поскольку это редко действительное значение. «/», возможно, не самый лучший разделитель, поскольку он действителен для путей иногда. Параметры
Имея запрос несколько раз являются законными, и единственным способом, чтобы гарантировать отсутствие проблем при разборе во всех случаях:
http://someSite/someApp/myUtil.ashx?file=file1.txt&file=file2.bmp&file=file3.doc
точка с запятой ;
должна быть URI кодируется, если часть файла (обращенный к %3B
), но нет, если он разделяет параметры запроса, которые являются его зарезервированным использованием.
См. Раздел 2.2 от this rfc:
2.2. Зарезервированные символы
Многие URI включают в себя компоненты, состоящие из определенных символов или ограниченные ими. Эти символы называются «зарезервированными», поскольку их использование в компоненте URI ограничено их зарезервированной целью. Если данные для компонента URI будут конфликтовать с зарезервированной целью, тогда конфликтующие данные должны быть экранированы перед формированием URI.
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
Ваш ответ, кажется, состоит из двух частей. Не могли бы вы уточнить? – Sean
Это одна общая проблема. Как я справился с этим: я создал метод, который принял список строк, а затем нашел символ, который не был ни в одной из строк. (Я сделал это путем простой конкатенации строк, а затем для тестирования различных символов.) Как только символ был найден, объединил все строки вместе, но также добавил строку с символом разделения. Таким образом, в данном вопросе, один пример WUD быть: http://someSite/someApp/myUtil.ashx?files=|file1.txt|file2.bmp|file3.doc и другой WUD быть: http://someSite/someApp/myUtil.ashx?files=,file1.txt,file2.bmp,file3.doc Но так как я на самом деле использовать метод, который гарантирует мой символ-разделитель не в остальных строках, это безопасно. Это была небольшая работа для создания в первый раз, но я использовал ее много раз в различных приложениях.
звучит круто, как насчет размещения здесь кода? – chrisinmtown
Этот ответ в основном неверен. | символ недействителен в URL-адресах, по официальным спецификациям, и может вызвать различные проблемы, если вы попытаетесь его использовать. Символ & зарезервирован в строках запроса для разделения пар имя/значение. Запятая может быть выбором ОК, но необходимы дополнительные исследования. –
опасно предположить | не допускается в именах файлов. Linux допускает любые символы в именах файлов. но в Windows, да, есть несколько конкретных исключений, которые включают |. –
@DougS: Я объясняю, почему '|' - плохой выбор в отношении имен файлов. Это также может быть плохой выбор в URL-адресах, я даже не претендую на это. Итак, как это делает мой ответ неправильным? – MSalters