1 に答える
TL;DR の要約:
- どこでも UTF-8 を使用する
- URI の場合、URL で許可されている少数の文字を除くすべての文字をパーセント エスケープします。
- UTF-8 URL で適切に動作するブラウザーを使用するよう顧客に勧めます。
詳しい説明はこちら。求めているのは、次の 5 つのプロパティを持つ Web サイトの URL のシステムです。
- ユーザーのブラウザーのロケーション バーに表示されると、URL はユーザーが読みやすく、ユーザーの優先言語で表示されます。
- ユーザーが好みの言語で読みやすいテキストを入力するか、ブラウザのロケーション バーに貼り付けると、ブラウザは、サイトの HTTP サーバーが正しく解釈できる URL を形成します。
- Web ページに表示される場合、URL はユーザーにとって読みやすく、ユーザーの優先言語で表示されます。
- HTML リンクでリンク ターゲットとして提供されると、ユーザーの Web ブラウザがサイトに正しく送信でき、サイトの HTTP サーバーが正しく解釈できる URL を形成します。
- サイトの HTTP サーバーがこれらの URL を受信すると、アプリケーションが正しく解釈できる方法で URL をアプリケーションに渡します。
RFC 3986 URI Generic Syntaxの section 2 Charactersには、
この仕様では、URI 文字と、それらの文字を格納または送信するために使用されるオクテットとの間のマッピングに、特定の文字エンコーディングを義務付けていません..オクテットの対応する文字が外部にある場合、コンポーネント内のデータ オクテットを表すために、パーセント エンコーディング メカニズムが使用されます。許可されたセットまたは区切り文字として使用されています...
ただし、問題の URI はhttp://
URI であるため、HTTP 仕様も適用されます。RFC 2616 HTTP/1.1の Section 3.4 Character Setsは、MIME の charset タグを使用してエンコーディング (MIME 仕様との一貫性を保つために「文字セット」と名付けられています) が指定されていると述べています。
つまり、URI はさまざまなエンコーディングを使用できますが、使用するエンコーディングについて Web サイト コードと HTTP サーバーが一致していることを確認する必要があります。HTTP プロトコルは、URI の大部分を不透明なオクテット ストリームとして扱います。実際には、UTF-8 が適切な選択です。Unicode 文字レパートリー全体をカバーし、オクテット ベースのエンコーディングであり、広くサポートされています。パーセント エンコーディングは、Ruby のURI::Escapeメソッドなどを使用して簡単に追加および削除できます。
ブラウザの横を向いてみましょう。ユーザーがサイトにアクセスしているブラウザを特定する必要があります。これらのブラウザーの URL 処理をテストするには、日本語のパス要素を含む URL を貼り付け、Web サーバーが Ruby コードに提示する URL を確認します。私のメイン ブラウザである Mac OS X 上の Firefox 16.0.2 は、ロケーション バーに貼り付けられた文字を UTF-8 として解釈し、URL を HTTP リクエストに渡すときにそのエンコーディングとパーセント エスケープを使用します。同様に、非ラテン文字を含む HTTP ページの URL に遭遇すると、URL のパーセント エンコーディングを削除し、結果のオクテットを UTF-8 でエンコードされているかのように扱います。ユーザーが好むブラウザが同じように動作する場合、UTF-8 URL は日本語でユーザーに表示されます。
顧客は、パーセントでエンコードされた URL や UTF-8 でエンコードされた URL 部分で適切に動作しないブラウザーを使用することを主張していますか? 次に、問題があります。Shift-JIS など、ブラウザがうまく機能する他のエンコーディングを見つけ出し、代わりにページと Web サーバーがそのエンコーディングを尊重するようにすることができます。または、ユーザーに UTF-8 を十分にサポートするブラウザーに切り替えるよう促してみてください。
次に、サイトの Web ページを見てみましょう。コードは Web ページのエンコーディングを制御します。ページ内のリンクには、リンク テキスト (もちろん日本語でもかまいません) とリンク ターゲット (Web サーバーが理解できるエンコーディングでなければなりません) が含まれます。UTF-8 は Web ページのエンコーディングに適しています。
したがって、どこでも UTF-8 を使用する必要はありません。重要なことは、エコシステムの 3 つの部分 (顧客の Web ブラウザー、HTTP サーバー、および Web サイト コード) のすべてで適切に機能するエンコードを 1 つ選択することです。顧客は、このエコシステムの一部を制御します。残りの 2 つを制御します。
このエンコーディングで URL パス ("username-slugs") をエンコードし、それらの URL をパーセント エスケープします。このエンコーディングを使用するには、ページを作成してコーディングします。ユーザー エクスペリエンスは、上記の 5 つの要件を満たす必要があります。また、UTF-8 が適切なエンコーディングの選択肢になる可能性が高いと予測しています。