2012年8月19日日曜日

phpでのURLエンコード、デコード

結論

エンコードはrawurlencode()
デコードはurldecode()
関数を使う。

エンコード

rawurlencode
 RFC1738に準拠したエンコードを行う。
 半角スペースを「%20」に変換

urlencode
 ブラウザからのformポストなどはこのエンコード方式。
 (application/x-www-form-urlencoded形式)
 半角スペースは「+」に変換される。

APIなどへのアクセスで利用するエンコード方式はRFC1738系が多く、amazonのAPI等ではRFC1738に準拠してないデータはエラーになる。下記デコード時の理由等もあり、エンコード時はrawurlencodeを使う方が無難。


デコード

逆にデコードの場合はrawurldecodeはRFC1738での動作しかしない為、「+」が半角スペースにデコードされない。
urldecodeでは%20も+も半角スペースに変換される為、デコード時はurldecodeが無難。