1e775503661398f19fa3be399df2e455
受限會員
個人介绍

我是一隻弱小的毛毛蟲,想像有天可以成為強壯的挖土機,擁有挖掘夢想的神奇手套!

  • 12月23日 08:42 在 請求參數 URL 編碼 回應:

    如果設定config/application.rb中config.encoding為UTF-8時,請求參數若是Big5的「測」URL編碼,也就是編碼為%B4%FA,則控制器中透過params取得的請求參數字串為UTF-8編碼,但是事實上位元組序列還是B4 FA,可以有機會轉回正確的UTF-8字串。例如若發送test=%B4%FA,可以如下取得正確的Big5編碼的「測」,再轉為UTF-8編碼的字串:

    params[:test] = params[:test].force_encoding("big5").encode("UTF-8")
    

    如果設定config/application.rb中config.encoding為Big5時,請求參數若是Big5的「測」URL編碼,也就是編碼為%B4%FA,則控制器中透過params取得的請求參數字串為Big5編碼,但是位元組序列還是63 63,所以沒有機會轉回正確的Big5字串,此時可透過query_string取得原始的查詢參數,如下處理:

    # 假設查詢參數是test1=%B4%FA&test2=%B8%D5
    require "cgi"
    parameters = request.query_string.split("&")   # ["test1=%B4%FA", "test2=%B8%D5"]
    parameters.each do |parameter|
        p = parameter.split("=")
        params[p[0]] = CGI.unescape(p[1], "big5")
    end
    

    這邊透過CGI模組中的unescape方法來解碼URL,params[:test1]就會是正確的Big5編碼「測」字,params[:test2]就會是正確的Big5編碼「試」字。

  • 12月21日 09:26 在 請求參數 URL 編碼 回應:

    當然 UTF-8 一路到底是最省事的,不過要處理其它編碼的機會也是有的,之前客戶(維護為主)那邊就遇到不少要處理編碼的鳥事,無論如何,走別的路暫時倒也有一些心得:
    http://caterpillar.onlyfun.net/Gossip/Rails/Encoding.html

    Rails 目前還在學,有寫錯麻煩鞭一下:
    http://caterpillar.onlyfun.net/Gossip/Rails/index.html

    在客戶那邊的經驗,整理的一些編碼心得:
    http://caterpillar.onlyfun.net/Gossip/Encoding/index.html

  • 12月21日 08:24 在 請求參數 URL 編碼 回應:

    如果params取得的字串位元組序列都是63,應該就不是 iconv 可以幫上忙了,還是說 Rails 有辦法讓 iconv 之類的程式庫,可以介入 Rails 對 URL 進行解碼的過程?或者是 Rails 本身有哪邊可以直接設定 URL 編碼的選項?

  • 12月21日 03:25 在 請求參數 URL 編碼 回應:

    先自答一下...

    在設定 config.encoding 為 Big5 時,請求參數若是Big5的「測」URL編碼,也就是編碼為%B4%FA,暫時想到,可以用request.query_string取得完整的查詢字串,再自己作URL解碼來得到Big5的「測」,不知道有沒有比較沒這麼笨的方法?

  • 11月26日 08:42 在 歡迎大家加入這裡!來打聲招呼吧! 回應:

    Orz