Кодирование URL символами нижнего подчеркивания в имени каталога?

Мы столкнулись с нечетным аргументом, где я работаю, и я могу быть неправ в этом, таким образом, это - то, почему я спрашиваю.

Наше программное обеспечение производит каталог к серверу Apache, который заменяет подчеркивание %5F от имени каталога.

Например, если бы название каталога было перечислено как строка в нашем программном обеспечении, то это было бы: "andy_test", но затем когда программное обеспечение производит каталог к серверу Apache, это стало бы "andy%5Ftest". К сожалению, при доступе к URL на сервере, он заканчивает тем, что стал "andy%255Ftest".

Так или иначе это кажется неправильным мне, еще раз прогрессия:

  1. andy_test <-(как строка в программном обеспечении)
  2. andy%5Ftest <-(перечисленный как каталог на сервере)
  3. andy%255Ftest <-(должен использоваться при вызове того же каталога как URL на сервере от веб-браузера.)

Я предполагаю, что "%5" кодирует для подчеркивания, и что "%25" кодирует для "%".

Теперь мне казалось бы, что способ, которым имя каталога должно быть перечислено на сервере, был бы просто andy_test и если бы Вы использовали закодированный URI затем, возможно, то Вы закончили бы с "andy%5Ftest" для доступа к каталогу на апачском сервере.

Я спросил парней относительно бэкенда об этом, и они сказали, что были справедливы: "кодирование чего-либо, что не было буквой или числом.

Таким образом, я предполагаю, что немного смущен на этом. Можно ли сказать мне, кто прав, и направьте меня к некоторой информации о почему?

7
задан leeand00 8 February 2010 в 15:15
поделиться

2 ответа

Вы не должны кодировать имена каталогов при их создании (как вы предлагаете). Кодирование должно происходить только на последнем этапе, когда оно передается браузеру. Вот почему в итоге получается "двойная" кодировка: %25 - это %, а 5F - это остаток от первой кодировки подчеркивания.

Также обратите внимание, что вам не нужно кодировать подчеркивания в соответствии с rfc1738.

2.2. Вопросы кодирования символов URL

...

Таким образом, только буквенно-цифровые символы, специальные символы "$-_.+!*'()," и зарезервированные символы, используемые для своих зарезервированных целей, могут быть использованы без кодировки в URL.

11
ответ дан 6 December 2019 в 15:21
поделиться

Моя любимая ссылка на Perl one liners (и верхний хит в Google для этой фразы) охватывает perl -ne : http://novosial.org/perl/one-liner/

-121--2242511-

Как указано в FAQ : попробуйте запустить очистку.

-121--885975-

В том, что вы показываете, происходит двойная кодировка. Достаточно двух шагов:

andy _ test - это как последовательность в программном обеспечении, так и фактическое имя каталога или сценария в файловой системе (ресурс, к которому обращается веб-сервер)

andy% 5Ftest - это andy _ test в кодировке URL. Эта последовательность должна использоваться браузером (она не нужна в случае подчеркивания, но может быть и в других случаях).

andy% 255 fest - это только andy _ test URL-адрес, закодированный дважды, что не имеет смысла, нет необходимости. Просто решите, ГДЕ вы будете делать кодировку. Если вы делаете это как на уровне кода, так и на уровне веб-сервера, это то, что может произойти, и в результате нарушаются ссылки, если вы не декодируете два раза снова, что на самом деле не нужно и не разумно.

3
ответ дан 6 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: