web-dev-qa-db-ja.com

URLにUTF-8文字を含めることはできますか?

URLをASCIIまたはUTF-8でエンコードする必要があるかどうか興味がありました。URLにはASCII以外の文字を含めることはできないと信じていましたが、誰かがUTF-8を使用できると言っていました。探し回ったところ、どれが正しいのかよくわかりませんでした。誰か知っていますか?

11
Popcorn

これには2つの部分がありますが、どちらも「はい」になります。

[〜#〜] idna [〜#〜] を使用すると、完全なUnicodeレパートリーを使用してドメイン名を登録できます(あいまいさや乱用を防ぐために少し工夫を加えています)。

パス部分は厳密には規制されていませんが、パス内の任意の文字列をエンコードすることは可能です。ブラウザは、エンコードされたパスではなく、人間が読める形式のレンダリングを表示することを選択できます。ただし、パスの文字セットとエンコーディングを指定する方法がないため、これにはヒューリスティックが必要です。

したがって、 http://xn--msic-0ra.example/mot%C3%B6rhead は(架空の例であり、完全には正しくありません)コンピューターで読み取り可能なエンコードされたURLであり、ユーザーに次のように表示できます。 http://müsic.example/motörhead 。ドメイン名は Punycode と呼ばれるものでxn--msic-0ra.exampleとしてエンコードされ、パスにはUTF-8としてエンコードされたラベル「motörhead」とURLエンコード(Unicodeコードポイント + 00F6 は、UTF-8)の2バイト0xC30xB6で表されます。

パスは、Latin-1の同じラベルであるmot%F6rheadにすることもできます。この場合、人間が読める形式の合理的な表現を推測することははるかに困難ですが、おそらく周囲の文字のコンテキストは、適切な推測のための十分なヒントを提供する可能性があります。

単独では、%F6はほとんど何でもかまいませんし、%C3%B6はたとえば次のようになります。 UTF-16。

4
tripleee