はじめに

REST APIなどでGETのクエリパラメータなどにURLを入れたい時ってありますよね?
例えばFacebookやtwitterなどのoauthの際にredirect_url=XXXXというようなパラメータを入れる必要があります。その際にencodeされたURLでないとうまく処理できません。

ElixirでのURLエンコードの方法

URIモジュールのencode_www_form関数でencodeできます。
URI.encode関数がありますがこちらとは別物ですので、お気をつけてください。

iex
iex(1)> URI.encode_www_form("http://elixir-lang.org/")
"http%3A%2F%2Felixir-lang.org%2F"

iex(2)> URI.encode_www_form("http://localhost:4000")
"http%3A%2F%2Flocalhost%3A4000"

こちらは単品で変換しましたが、用途としてはクエリーパラメータに入れることが多いのでencode_query関数を使ってクエリパラメータを作りつつ変換した方が楽だと思います。

iex
iex(1)> URI.encode_query(%{redirect_uri: "http://localhost:4000/auth/callback"})
"redirect_uri=http%3A%2F%2Flocalhost%3A4000%2Fauth%2Fcallback"

【注意】
encode_query関数にURI.encode_www_formをクエリーに使うと二重でencodeされておかしなことになるので注意です

iex
iex(1)> URI.encode_query(%{redirect_uri: URI.encode_www_form("http://localhost:4000/auth/callback")})
"redirect_uri=http%253A%252F%252Flocalhost%253A4000%252Fauth%252Fcallback"

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.