常に間違えるのでメモ。パーセントエンコーディングには二種類ある。普通のやつと、空白を "+" に変換する application/x-www-form-urlencoded。application/x-www-form-urlencoded は記憶から抹消するべき。実際に URL のクエリ部分に application/x-www-form-urlencoded を使うとエラーを出す実装も存在するので、歴史的な意味しか無い混乱を生むだけの悪しき存在としか思えない。
- 普通のやつ
- 例: "Hello 1+1!" を "Hello%201%2B1%21" と書く。
- 用途: URL のクエリ以外
- 仕様: https://url.spec.whatwg.org/#percent-encoded-bytes
- python: quote("Hello 1+1!")
- javascript: encodeURIComponent("Hello 1+1!")
- application/x-www-form-urlencoded
- "Hello World!" を "Hello+1%2B1%21" と書く。
- 用途: URL のクエリ部分や POST の body
- 仕様: https://url.spec.whatwg.org/#urlencoded-parsing
- in many ways an aberrant monstrosity と書かれている。。。
- python: quote_plus("Hello World!")
- javascript: 存在しない???
- encodeURI("Hello 1+1!") は 'Hello%201+1!' となる (+ が変換されない)