日本語を含むURLをコピーしたら、記号と数字の羅列に変わっていた。あるいはメールに貼ったリンクが途中で切れて開けない。これらは同じ仕組みから生まれる、別々の症状です。
%が並んだ文字列を貼り付ければ、その場で読める形に戻せます。仕組みの説明は、必要になったら読んでください。
URLに使える文字は、じつは厳しく決められています。英数字と、ハイフン・ピリオド・アンダースコア・チルダ。基本はこれだけです。スラッシュや疑問符などの記号は「区切りの意味」を持つ特別な文字として使われます。
この決まりが作られた当時、URLは英語圏の技術者だけが使うものでした。日本語が入ることは想定されていません。そのため、日本語をURLに入れるには使える文字だけで表し直す必要があります。
その方法が、パーセントエンコーディングと呼ばれる仕組みです。やっていることは単純で、使えない文字を「%+2桁の英数字」に置き換えているだけです。たとえば「あ」は %E3%81%82 になります。
コンピュータは文字を数値で管理しています。現在ほとんどの場面で使われている方式では、日本語1文字を3つの数値の組で表します。英数字は1つで足りるのに対し、日本語は3つ必要です。
パーセントエンコーディングは、この数値を1つにつき「%+2桁」で書き出します。だから日本語1文字が %が3つ分、9文字に膨らみます。「東京」の2文字が18文字になる計算です。
URLが極端に長く見えるのはこのためで、異常ではありません。日本語のフォルダ名やファイル名をそのままURLにすると、この膨張が起きます。
変換済みのURLを、もう一度変換してしまった状態です。1回目の変換で生まれた「%」という記号自体が、2回目の変換で %25 に置き換わります。
結果は %25E3%2581%2582 のような、%25 が繰り返し現れる文字列です。これを1回だけ戻しても読める文字にならず、2回戻す必要があります。
起きやすいのは、すでにURLが入っている欄に対して変換処理をもう一度かけたときや、システムからシステムへURLを受け渡したときです。%25 を見つけたら、まずこれを疑ってください。
半角スペースの扱いには2つの流儀があります。%20 に置き換える方式と、+ に置き換える方式です。後者は検索フォームの送信部分に限って使われてきた古い決まりで、URL全体の規則とは別物です。
+ 方式で作られた文字列を %20 方式で読み戻すと、+ がスペースに戻らずそのまま残ります。逆に、もともと + という記号を含む文字列を + 方式で読み戻すと、記号だったはずの + がスペースに化けます。
| 元の文字 | %20方式 | +方式 |
|---|---|---|
| 半角スペース | %20 | + |
| +(記号として) | %2B | %2B |
メールソフトは長い行を一定の位置で折り返します。折り返しの改行がURLの途中に入ると、リンクはそこで終わったものとして扱われます。日本語を含むURLは前述のとおり長くなるため、この事故に遭いやすくなります。
厄介なのは、切れた位置が「%」と2桁の途中だった場合です。%と1桁だけが残ると、変換の規則から外れるため復元が止まります。「途中まで読めるのに、その先が化けている」という症状は、たいていこれです。
文字を数値に置き換える方式は、過去にいくつも存在しました。現在の主流とは違う方式で変換されたURLは、現在の方式で読み戻しても意味のある文字になりません。
古いシステムから出力されたURLや、長く更新されていないサイトのリンクで起きます。この場合は変換元の方式を指定して戻す必要があり、一般的な変換ツールでは対応できないことがあります。
なお、変換前のURLと変換後のURLはまったく同じ場所を指します。読みやすさが違うだけで、どちらを使ってもたどり着く先は変わりません。資料に載せるなら読める形、システムに渡すなら変換した形、と使い分けてください。
ひとつ注意点があります。パーセントエンコーディングは秘密にするための仕組みではありません。読みにくくなるだけで、誰でも元に戻せます。
URLは、ブラウザの履歴、アクセス記録、リンク元の情報として、さまざまな場所に残ります。個人情報や認証に使う文字列をURLに含めると、それらがすべての経由地に記録されます。変換しても隠したことにはなりません。
多くの場合は戻せます。これは日本語をURLで扱える形に置き換えただけの状態で、置き換えの規則が決まっているため、逆向きにたどれば元の文字に復元できます。ただし復元できないこともあります。ひとつは文字列が途中で切れている場合で、%と2桁の組が欠けていると復元が止まります。もうひとつは、現在ほとんど使われない古い文字コードで変換されている場合で、この場合は変換元の文字コードを指定しないと読める文字になりません。
ブラウザのアドレス欄に入力するぶんには問題ありません。ブラウザが自動で変換してくれるためです。ただし、そのURLをメールやチャットに貼る、他のシステムに登録する、資料に印刷するといった場面では扱いが変わります。相手側のソフトが日本語URLに対応していないと、途中で切れたり別の文字に置き換わったりします。外部に渡すURLは、あらかじめ変換した形にしておくほうが事故が起きません。
半角スペースの扱いには2つの流儀があるためです。ひとつは %20 に置き換える方式で、URLのどの部分でも使えます。もうひとつは + に置き換える方式で、これは検索フォームなどの入力内容を送る部分に限って使われてきた古い決まりです。問題は、+ 方式で作られた文字列を %20 方式で読み戻すと、+ がそのまま残ってしまう点です。スペースが + になって戻らないときは、この食い違いを疑ってください。
メールソフトが一定の文字数で行を折り返すためです。折り返された位置に改行が入り、リンクがそこで終わったと判断されます。対処としては、URLを山かっこで囲む、短縮したURLを使う、本文に直接貼らず添付資料に載せる、といった方法があります。なお、受け取った側で切れたURLをつなぎ直すと %の後ろの2桁が欠けることがあるため、つなぎ直したURLが開けない場合は送り直してもらうのが確実です。