Как мне необработанный URL кодировать / декодировать в JavaScript и Ruby, чтобы получить одинаковые значения в обоих? - PullRequest
11 голосов
/ 14 мая 2010

Я работаю над веб-приложением, в котором мне нужно кодировать и декодировать строку на стороне JavaScript и бэкэнд-код Ruby. Единственная проблема заключается в том, что методы escape для JavaScript и Ruby имеют небольшую разницу. в JavaScript " " обрабатывается как "%20", а в ruby ​​" " кодируется как "+".

Есть ли способ решить эту проблему? Другой метод Ruby для кодирования строки в необработанном URL-кодировании?

После некоторого тестирования Selenium я заметил, что по какой-то причине URI.unescape смешивается между "£" и "?". Если я использую encodeURIComponent("£"); в JavaScript, а затем URI.unescape("%C2%A3") в Ruby, который является значением, которое мы получаем при кодировании знака "£", я получаю возвращенный знак "?". Любое решение?

Ответы [ 2 ]

31 голосов
/ 14 мая 2010

Использование

URI.escape(foo, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))

в рубине и

encodeURIComponent(foo); 

в JavaScript

Оба они будут вести себя одинаково и кодировать пространство как% 20.

0 голосов
/ 17 февраля 2016
require "uri";
puts URI.escape "1 2;", Regexp.new("[^0-9a-z\\-_.!~*'()]", "i");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...