Как сохранить знак «+» в параметрах в рельсах 5 - PullRequest
0 голосов
/ 30 июня 2018

У меня есть такой URI /store?email=google+@gmail.com. Поскольку в адресе электронной почты разрешен знак «+», мне нужно сохранить знак плюс. Однако в рельсах 5, если я использую params[:email], я получаю google @gmail.com. Как не дать рельсам преобразовать «+» в пространство? Я знаю, что мы можем сначала закодировать URL, а затем декодировать его, чтобы сохранить знак «+», но могу ли я напрямую использовать params вместо извлечения параметров из uri? Есть ли способ сохранить знак плюса в params?

Также я попытался использовать URI.decode_www_form_component params[:email], который все еще не работал. И поскольку URL-адрес предоставляется внешним источником, я не могу попросить их явно кодировать + как %2B.

Будем благодарны за любые предложения!

1 Ответ

0 голосов
/ 30 июня 2018

Пользователи вашего API должны правильно кодировать URI своих параметров.

+ является зарезервированным символом URI и имеет особое значение - это способ кодирования пробела. Если пользователи хотят отправить литерал +, они должны кодировать его как URI %2B. @ также зарезервировано и должно быть закодировано как %40, хотя оно может проскальзывать.

Они должны отправить вам /store?email=google%2B%40gmail.com. Rails расшифрует его для вас, и params[:email] будет google+@gmail.com.

Если вы попытаетесь «исправить» их ошибку, ваше приложение будет работать неправильно, и это вызовет больше проблем.

И поскольку URL-адрес предоставляется внешним источником, я не могу попросить их явно кодировать + как% 2B.

Вы не спрашиваете их, они уже должны знать, как работает стандарт. У кого-то есть неряшливый конец.

Предоставьте им полезное сообщение об ошибке, и они его выяснят.

email `google @gmail.com` is not valid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...