or1ko's diary

日々を書きます

URIクエリの構築例(UTF8)

コード

import Network.URI (escapeURIString, isAllowedInURI)

host = "http://www.yahoo.co.jp/test"
params = [("query","テスト"), ("key", "キー")]

main = putStr $ buildURI host params

buildURI host params = host ++ "?" ++ (join "&" $ map aQuery params)
  where 
    aQuery (k,v) = k ++ "=" ++ (escapeURIString isAllowedInURI v)
    join x xs = foldr1 (\w s -> w ++ x ++ s) xs

実行結果

http://www.yahoo.co.jp/test?query=%E3%83%86%E3%82%B9%E3%83%88&key=%E3%82%AD%E3%83%BC

久しぶりに動かしてみたところ、UTF-8でも動作するようにescapeURIStringが変更されていました。