Charset и POST запрос - PullRequest
       22

Charset и POST запрос

1 голос
/ 26 марта 2010

У меня есть приложение Rails 2.3.5, которое отлично работает с UTF-8 и международными символами. Теперь я сделал некоторую интеграцию с платежным шлюзом, где я POST некоторые данные, подожди некоторое время и получить POST обратно. Проблема в том, что когда я получаю этот пост, международные символы ломаются. Вместо «sørensen» я получаю: «sørensen». Если я выполняю «iconv -t ISO-8859-1 -f UTF8», он корректно преобразуется в первый (я делаю это из командной строки OS X). Я рассмотрел запрос POST с logger.info (request.headers.inspect) в моем контроллере, и я вижу, что не задан параметр charset.

В соответствии с ними POST от шлюза должен быть ISO-8859-1 - проблема в том, что Rails считает, что это UTF8? Это согласуется с проблемой, которую я вижу?

Я знаю, что одним из решений является просто преобразование хеша params с Iconv в контроллере, но я хотел бы знать, что происходит.

Заранее спасибо.

С уважением,

Jacob

Ответы [ 2 ]

0 голосов
/ 27 января 2014

Я закончил этим:

В модели:

FIELDS_TO_FIX=[:name, :city, :address]  

# DIBS sucks and sends UTF8 in some strange encoding. So we have to do an array.pack on
# strings when posting to DIBS and unpack them at callback.
#
def self.fix_encoding(params)  
  FIELDS_TO_FIX.each do |f|
    next if params[f].nil?
    params[f]=params[f].unpack("M")[0].force_encoding("UTF-8")
  end
  params
end

В действии создания контроллера:

  params[:booking]=Booking.fix_encoding(params[:booking])

А с учетом того, что сообщения на внешний ресурс:

<input type="hidden" name="booking[name]" value="<%= [@booking.name].pack("M") %>" />

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 26 марта 2010

вы можете убедиться, что заголовки запроса установлены в POST. Вы можете увидеть приемлемые значения по следующей ссылке. http://en.wikipedia.org/wiki/List_of_HTTP_headers

...