Мы столкнулись с нечетным аргументом, где я работаю, и я могу быть неправ в этом, таким образом, это - то, почему я спрашиваю.
Наше программное обеспечение производит каталог к серверу Apache, который заменяет подчеркивание %5F от имени каталога.
Например, если бы название каталога было перечислено как строка в нашем программном обеспечении, то это было бы: "andy_test", но затем когда программное обеспечение производит каталог к серверу Apache, это стало бы "andy%5Ftest". К сожалению, при доступе к URL на сервере, он заканчивает тем, что стал "andy%255Ftest".
Так или иначе это кажется неправильным мне, еще раз прогрессия:
Я предполагаю, что "%5" кодирует для подчеркивания, и что "%25" кодирует для "%".
Теперь мне казалось бы, что способ, которым имя каталога должно быть перечислено на сервере, был бы просто andy_test и если бы Вы использовали закодированный URI затем, возможно, то Вы закончили бы с "andy%5Ftest" для доступа к каталогу на апачском сервере.
Я спросил парней относительно бэкенда об этом, и они сказали, что были справедливы: "кодирование чего-либо, что не было буквой или числом.
Таким образом, я предполагаю, что немного смущен на этом. Можно ли сказать мне, кто прав, и направьте меня к некоторой информации о почему?
Вы не должны кодировать имена каталогов при их создании (как вы предлагаете). Кодирование должно происходить только на последнем этапе, когда оно передается браузеру. Вот почему в итоге получается "двойная" кодировка: %25 - это %, а 5F - это остаток от первой кодировки подчеркивания.
Также обратите внимание, что вам не нужно кодировать подчеркивания в соответствии с rfc1738.
2.2. Вопросы кодирования символов URL
...
Таким образом, только буквенно-цифровые символы, специальные символы "$-_.+!*'()," и зарезервированные символы, используемые для своих зарезервированных целей, могут быть использованы без кодировки в URL.
Моя любимая ссылка на Perl one liners (и верхний хит в Google для этой фразы) охватывает perl -ne
: http://novosial.org/perl/one-liner/
Как указано в FAQ : попробуйте запустить очистку.
-121--885975-В том, что вы показываете, происходит двойная кодировка. Достаточно двух шагов:
andy _ test
- это как последовательность в программном обеспечении, так и фактическое имя каталога или сценария в файловой системе (ресурс, к которому обращается веб-сервер)
andy% 5Ftest
- это andy _ test
в кодировке URL. Эта последовательность должна использоваться браузером (она не нужна в случае подчеркивания, но может быть и в других случаях).
andy% 255 fest
- это только andy _ test
URL-адрес, закодированный дважды, что не имеет смысла, нет необходимости. Просто решите, ГДЕ вы будете делать кодировку. Если вы делаете это как на уровне кода, так и на уровне веб-сервера, это то, что может произойти, и в результате нарушаются ссылки, если вы не декодируете два раза снова, что на самом деле не нужно и не разумно.