14635


現在、railsで開発したサイトで日本語URLを利用しています。  
facebookの共有URLをrequest.urlで生成しているのですが、  
下記のエラーが出てしまい、うまく動きません。

> incompatible character encodings: UTF-8 and ASCII-8BIT

多くのサイトで下記の方法で解決していたのですが

[code]

    request.url.force_encoding("utf-8")
    
[/code]

記述忘れを防ぐためにも、毎回`force_encoding("utf-8")`を用いてエンコードせずに  
`request.url`のメソッド自体をオーバーライドしてエンコードしたいと考えています。

どのようにすれば既存の`request.url`のメソッドをオーバーライドできるでしょうか？


CC BY-SA 3.0
2015-08-17T10:58:12.687
14526
2015-08-19T16:07:15.937
2015-08-17T11:03:41.253
10201
10201
question
ruby-on-rails ruby
railsでの日本語URLエンコード問題


アラウンドエイリアスというテクニックを使えば実現は可能です。  
以下のコードをlib配下に置くなりして、Rails起動時に読み込むようにしてみてください。  
（rails 4.2.3で確認）

[code]

    class ActionDispatch::Request
      alias_method :__url, :url
      def url
        __url.force_encoding("utf-8")
      end
    end
    
[/code]

requestのurlメソッドを別名で退避してから、新urlメソッドでエンコードしたURLを返します。

ただし、元々urlメソッドを呼び出していた箇所（Rails内も含め！）の挙動が変わる可能性があるので、そこは注意してください。（ひょっとしたら何か不都合があるかも）

facebookの共有URLを生成する箇所が分かっているなら、素直にエンコード済みURLを返すようなヘルパーを作った方が無難だと思います。


CC BY-SA 3.0
2015-08-19T16:07:15.937
14635
2015-08-19T16:07:15.937
9608
14526
answer