2015-10-12 45 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

這是紅寶石/ lib目錄/ 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方法。 pputs輸出到標準輸出。

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

# for more "raw" data 
# `p str` or `puts str.inspect` 
$LOG.debug(str.inspect)