2015-10-12 1 views
1

Использование Ruby 1.9.1 или 1.9.3, у меня есть проблема с вставкой символа % в базу данных.Как мне закодировать URL-адрес, если это частный метод?

Исключение:

/app/vendor/ruby-1.9.3/lib/ruby/1.9.1/uri/common.rb:898:in `decode_www_form_component' 

мне сказали, чтобы использовать p для вывода str.

Это рубин/Библиотека/1.9.1/Util/common.rb:

def self.decode_www_form_component(str, enc=Encoding::UTF_8) 

    require 'logger' 
    # Keep data for the current month only 
    $LOG = Logger.new('this_month.log', 'monthly') 
    $LOG.debug("#{str.p}")  

    raise ArgumentError, "invalid %-encoding (#{str})" unless /\A[^%]*(?:%\h\h[^%]*)*\z/ =~ str 
    str.gsub(/\+|%\h\h/, TBLDECWWWCOMP_).force_encoding(enc) 
end 

Я получил эту ошибку:

Internal Server Error 
cannot parse Cookie header: private method `p' called for "innate.sid":String 

Как pstr, чтобы узнать, что находится внутри него и, может быть, какая кодировка?

+1

Вы изменяете код URI? Не делай этого! Очень легко написать метод, который переопределит его в вашем собственном коде, или просто обернуть его и вывести в журнал. Если вы меняете системный или основной код, вы затрагиваете каждый другой скрипт, который будет использовать этот метод, который может иметь плохие результаты, если есть ошибка. Одна из лучших возможностей OO-языка - мы можем переопределить, не изменяя код базового класса –

ответ

4

Вам не нужен метод p, если вы используете регистратор. p и puts выход на стандартный вывод.

# this is equavalent to `puts str` 
$LOG.debug(str) 

# for more "raw" data 
# `p str` or `puts str.inspect` 
$LOG.debug(str.inspect) 
Смежные вопросы