Rails: запись данных с «+» становится пустой - PullRequest
0 голосов
/ 12 июня 2009

У меня есть данные постов со знаком «+». Как только он попадает на сервер, необработанные данные поста показывают знак «+», но как только данные поста попадают в хэш параметра, знак «+» преобразуется в пустое. Любые идеи о том, как сделать так, чтобы это НЕ делалось?

Ответы [ 5 ]

2 голосов
/ 13 июня 2009

Взгляните на метод CGI.escape в стандартной библиотеке, который сделает это за вас:

irb(main):001:0> require 'cgi'
=> true
irb(main):002:0> CGI.escape 'foo+bar&baz?qux quux/corge'
=> "foo%2Bbar%26baz%3Fqux+quux%2Fcorge"

Существует также метод CGI.unescape, если вам нужно преобразовать обратно.

2 голосов
/ 12 июня 2009

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

Однако также обратите внимание, что вам, вероятно, нужно проверить свои амперсанды, знаки процента и другие символы. Сервер, получающий ваши данные, вероятно, ожидает URLEncoded данных.

Короче говоря, если вы замените знаки% на% 25, ​​то замените & на% 26, замените? с% 3F, замените # на% 23 и замените знаки + на% 2B; Вы расскажете о большинстве проблем, с которыми можете столкнуться.

Более подробный список замен можно найти по этим ссылкам.

HTML-кодировка URL (w3schools)

Процентное кодирование (Википедия)

1 голос
/ 12 июня 2009

Не уверен, почему это происходит. Обычно + знаки доходят до параметров. Можете ли вы опубликовать свои версии рельсов. Также попробуйте экранировать знак "+" с помощью "+" или его эквивалентный CGI "% 2B", чтобы увидеть, если он имеет значение.

1 голос
/ 12 июня 2009

Попробуйте заменить + на% 2B.

0 голосов
/ 13 июня 2009

есть вызов Ruby, чтобы обработать все это для вас, поэтому вам не нужно выяснять символы самостоятельно

требуется 'uri'

url = http://www.google.com? A = это это тест URI.escape (url, Regexp.new ("[^ # {URI :: PATTERN :: UNRESERVED}]"))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...