結論
エンコードはrawurlencode()デコードはurldecode()
関数を使う。
エンコード
rawurlencodeRFC1738に準拠したエンコードを行う。
半角スペースを「%20」に変換
urlencode
ブラウザからのformポストなどはこのエンコード方式。
(application/x-www-form-urlencoded形式)
半角スペースは「+」に変換される。
APIなどへのアクセスで利用するエンコード方式はRFC1738系が多く、amazonのAPI等ではRFC1738に準拠してないデータはエラーになる。下記デコード時の理由等もあり、エンコード時はrawurlencodeを使う方が無難。
デコード
逆にデコードの場合はrawurldecodeはRFC1738での動作しかしない為、「+」が半角スペースにデコードされない。urldecodeでは%20も+も半角スペースに変換される為、デコード時はurldecodeが無難。