URLエンコード — 日本語やスペースを含むURLを安全に渡す
URLに使えない文字を %XX の形に変換し、逆に戻すこともできます。URL全体を変換するか、パラメータの値だけを変換するかを選べます。この区別を間違えるとリンクが壊れます。
URLで使える文字は決まっています。日本語、空白、&、?、#、+ などをそのまま入れると、途中で切れたり別の意味に解釈されたりします。だから %E3%81%82 のような形に置き換えます。
ブラウザのアドレス欄は日本語のURLを読みやすく表示してくれますが、内部では変換された形で扱われています。コピーして別の場所に貼ると長い文字列になるのはこのためです。
全体と値で変換の範囲が違います
URL全体を変換するときは、区切り記号を壊してはいけません。: / ? & = # はURLの構造を表すので、そのまま残す必要があります。
一方、パラメータの値だけを変換するときは、これらの記号も変換しなければいけません。検索語に & が入っていたら、そのまま置くと「次のパラメータが始まる」と読まれてしまうからです。
たとえば ?q=犬&猫 と書くと、犬というパラメータと猫というパラメータに見えます。値として変換すれば ?q=%E7%8A%AC%26%E7%8C%AB となり、ひとつの検索語として届きます。この切り替えがこのツールの「全体」と「値」です。
よく変換される文字
| 文字 | 変換後 | そのまま置くと |
|---|---|---|
| 空白 | %20(または +) | URLがそこで切れる |
| & | %26 | 次のパラメータの始まりと読まれる |
| ? | %3F | クエリの始まりと読まれる |
| # | %23 | 以降がページ内リンク扱いになる |
| + | %2B | 空白と解釈されることがある |
| あ | %E3%81%82 | 環境によって文字化けする |
空白は %20 か + か
URLのパス部分では %20 を使います。クエリ文字列では、古くからの慣習で + も空白として扱われます。フォームから送信された値が + で埋まっているのはこのためです。
受け取る側の実装によって、+ を空白と読むか、+ という文字と読むかが分かれます。確実を期すなら %20 を使ってください。
二重に変換してしまう事故もよくあります。% 自体が %25 に変換されるため、変換済みの文字列をもう一度変換すると %2520 のようになり、元に戻らなくなります。作業の前に、その文字列がすでに変換済みでないか確かめてください。
使いどころ
- •日本語を含むURLをメールやチャットに貼ると途中で切れる場合、変換してから貼ると崩れません。
- •検索結果のURLを共有するとき、検索語に記号が入っていると壊れがちです。
- •APIに渡すパラメータを組み立てるとき。値だけを変換するのが正しい使い方です。
- •入力した文字列は保存されません。変換はすべてブラウザの中で行われます。
よくある質問
「全体」と「値」はどちらを使えばよいですか?
URLをまるごと扱うなら全体、パラメータの中身を作るなら値です。値のほうは / や & も変換します。
変換したのにリンクが開きません。
全体を変換すべき場面で値として変換した可能性があります。: や / まで変換されているとURLとして成立しません。
%2520 になってしまいます。
二重に変換されています。一度戻してから、必要な回数だけ変換してください。
日本語のURLはそのまま使えますか?
多くのブラウザは表示上そのまま扱いますが、外部に渡すときは変換しておくほうが安全です。
