Подтвердить что ты не робот

Как кодировать периоды для URL-адресов в Javascript?

Сообщение SO ниже доступно, но все три описанных метода не могут кодироваться в течение периодов.

Сообщение: Кодировать URL-адрес в JavaScript?

Например, если я запускаю три метода (т.е. escape, encodeURI, encodeURIComponent), ни один из них не кодирует периоды.

Итак, "food.store" выходит как "food.store", который разбивает URL-адрес. Он разбивает URL-адрес, потому что приложение Rails не может распознать URL как действительный и отображает страницу ошибки 404. Возможно, это ошибка конфигурации в файле маршрутов Rails?

Какой лучший способ кодировать периоды с Javascript для URL-адресов?

4b9b3361

Ответ 1

Периоды не должны нарушать URL-адрес, но я не знаю, как вы используете этот период, поэтому я не могу сказать. Ни одна из функций, которые я знаю, не кодирует. для URL-адреса, то есть вам придется использовать свою собственную функцию для кодирования '.'.

Вы можете кодировать данные base64, но я не верю, что есть собственный способ сделать это в js. Вы также можете заменить все периоды своим эквивалентом ASCII (% 2E) как на стороне клиента, так и на стороне сервера.

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

hth

Ответ 2

Я знаю, что это старый поток, но я нигде не видел примеров URL-адресов, вызывающих исходную проблему. Я столкнулся с аналогичной проблемой сам пару дней назад с Java-приложением. В моем случае строка с периодом находилась в конце элемента пути URL, например.

http://myserver.com/app/servlet/test.string

В этом случае библиотека Spring, которую я использую, передавала мне только часть "test" этой строки в соответствующий параметр аннотированного метода моего класса контроллера, по-видимому, потому, что он обрабатывал ".string" как расширение файла и удаление его. Возможно, это одна и та же основная проблема с исходной проблемой выше?

В любом случае, я смог обходить это просто, добавив к URL-адресу конечную косую черту. Просто выбросьте это там, если это полезно кому-либо еще.

Джон

Ответ 3

Периоды не должны кодироваться в URL-адресах. Здесь - это RFC, чтобы посмотреть.

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

Ответ 4

У меня была такая же проблема, когда мой .htaccess нарушал входные значения. Поскольку я не хотел изменять то, что делал .htaccess, я использовал это, чтобы исправить это:

var val="foo.bar";
var safevalue=encodeURIComponent(val).replace(/\./g, '%2E');

тогда вся стандартная кодировка заменяется. с там ascii эквивалент% 2E. PHP автоматически преобразует обратно. в значении $_REQUEST, но .htaccess не видит его как период, поэтому все хорошо.

Ответ 5

У меня был тот же вопрос, и, может быть, мое решение может помочь кому-то еще в будущем.

В моем случае url был сгенерирован с использованием javascript. Периоды используются для разделения значений в URL-адресе (селектора селевки), поэтому самим селекторам не разрешалось иметь периоды.

Моим решением было заменить все периоды на html-объект как на Рисунок 1:

Рисунок 1: Решение

var urlPart = 'foo.bar';
var safeUrlPart = encodeURIComponent(urlPart.replace(/\./g, '.'));

console.log(safeUrlPart); // foo%26%2346%3Bbar
console.log(decodeURIComponent(safeUrlPart)); // foo.bar

Ответ 6

Если его возможное использование файла .htaccess сделает его действительно здоровым и легким. Просто добавьте\до периода. Что-то вроде: \.