web-dev-qa-db-ja.com

URLのUnicode文字

2010年、大規模なWebポータルでUTF-8文字を含むURLを提供しますか?

Unicode文字は、URLのRFCに従って禁止されています( here を参照)。標準に準拠するには、パーセントエンコードする必要があります。

しかし、私の主なポイントは、見栄えの良いURLを持つという唯一の目的のために、エンコードされていない文字を提供することです。

すべての主要なブラウザは、RFCが何と言っても、これらのURLを解析しているようです。しかし、私の一般的な印象は、Webブラウザのドメインを離れると非常に不安定になるということです。

  • URLがテキストファイル、メール、エンコードが異なるWebサイトにコピーアンドペーストされる
  • HTTPクライアントライブラリ
  • エキゾチックなブラウザー、RSSリーダー

ここでトラブルが予想されるという私の印象は正しいのですか?したがって、非技術的な視聴者にサービスを提供している場合、それが実際の解決策ではありません(引用されて渡されても、すべてのリンクが正常に機能することが重要です)?

見栄えの良いURLをHTMLで提供する魔法の方法はありますか

http://www.example.com/düsseldorf?neighbourhood=Lörick

特殊文字をそのままコピーして貼り付けることができますが、古いクライアントで再利用すると正しく動作しますか?

131
Pekka 웃

パーセントエンコーディングを使用します。最新のブラウザは表示と貼り付けの問題を処理し、人間が判読できるようにします。例 http://ko.wikipedia.org/wiki/위키백과:대문

Edit:FirefoxでそのようなURLをコピーすると、クリップボードはパーセントエンコード形式を保持します(通常は良いことです)が、その一部のみをコピーすると、エンコードされません。

119
Tgr

Tgrが言ったこと。バックグラウンド:

http://www.example.com/düsseldorf?neighbourhood=Lörick

それはURIではありません。しかし、それはisan IRI です。

HTML4文書にIRIを含めることはできません。 hrefなどの属性のタイプは、IRIではなくURIとして定義されます。とにかくここでIRIを処理するブラウザもありますが、それはあまり良い考えではありません。

IRIをURIにエンコードするには、パスとクエリ部分を取得し、それらをUTF-8エンコードしてから非ASCIIバイトをパーセントエンコードします。

http://www.example.com/d%C3%BCsseldorf?neighbourhood=L%C3%B6rick

IRIのホスト名部分に非ASCII文字がある場合、たとえばhttp://例え.テスト/、代わりに Punycode を使用してエンコードされています。

これでURIができました。 URIいURIです。しかし、ほとんどのブラウザはそれを隠します:アドレスバーにコピーして貼り付けるか、リンクをたどると、元のUnicode文字と共に表示されます。ウィキペディアはこれを何年も使用しています。たとえば:

http://en.wikipedia.org/wiki/ɸ

動作が予測不能であり、常に美しいIRIバージョンが表示されないブラウザーは...

...まあ、あなたは知っています。

85
bobince

URLスキームによっては、UTF-8でエンコードされた部分を「重要ではない」ものにすることができます。たとえば、スタックオーバーフローURLを見ると、次の形式になっています。

http://stackoverflow.com/questions/2742852/unicode-characters-in-urls

ただし、識別子の後に間違った部分を取得しても、サーバーは実際には気にしないので、これも機能します:

http://stackoverflow.com/questions/2742852/これは、これを日本語のテキストです

したがって、このようなレイアウトがあれば、識別子の後の部分でUTF-8を使用できる可能性があり、文字化けしても問題にはなりません。もちろん、これはおそらくある程度特殊な状況でのみ機能します...

16
Dean Harding

それが良いアイデアであるかどうかはわかりませんが、他のコメントで説明しているように、私が解釈すると、多くのUnicode文字がHTML5 URLで有効です。

例:href docs say http://www.w3.org/TR/html5/links.html#attr-hyperlink-href

A要素とarea要素のhref属性には、スペースで囲まれている可能性のある有効なURLの値が必要です。

次に、「有効なURL」の定義は http://url.spec.whatwg.org/ を指し、これはURLコードポイントを定義します なので:

ASCII英数字、「!」、「$」、「&」、「 '」、「(」、「)」、「*」、「+」、「、」、「-」、「。」、「/」 、「:」、「;」、「=」、「?」、「@」、「_」、「〜」、およびU + 00A0からU + D7FF、U + E000からU + FDCFの範囲のコードポイント、U + FDF​​0からU + FFFD、U + 10000からU + 1FFFD、U + 20000からU + 2FFFD、U + 30000からU + 3FFFD、U + 40000からU + 4FFFD、U + 50000からU + 5FFFD、U +60000からU + 6FFFD、U + 70000からU + 7FFFD、U + 80000からU + 8FFFD、U + 90000からU + 9FFFD、U + A0000からU + AFFFD、U + B0000からU + BFFFD、U + C0000 U + CFFFD、U + D0000からU + DFFFD、U + E1000からU + EFFFD、U + F0000からU + FFFFD、U + 100000からU + 10FFFDへ。

「URLコードポイント」という用語は、解析アルゴリズムのいくつかの部分で使用されます。 相対パス状態

CがURLコードポイントではなく、「%」ではない場合、解析エラー。

また、バリデーター http://validator.w3.org/"你好"などのURLを渡し、スペース"a b"などの文字を含むURLを渡しません

これらのコメントはすべて真実であるため、 ICANN が承認されたアラビア語(ペルシア語)および中国語の文字がドメイン名として登録されている限り、すべてのブラウザ作成会社(Microsoft、 Mozilla、Appleなど)は、エンコードなしのURLでUnicodeをサポートする必要があり、それらはGoogleなどで検索できる必要があります。

したがって、この問題はできるだけ早く解決します。

4
Nasser Hadjloo

パーセントエンコード形式を使用します。たとえば、Windows XPを実行している一部の(主に古い)コンピューターは、Unicodeではなく、ISOエンコードをサポートします。それが、パーセントエンコードされたURLが発明された理由です。また、簡単に入力できない文字が含まれている紙に印刷されたURLをユーザーに提供すると、そのユーザーは入力するのに苦労する場合があります(または単に無視します)。パーセントエンコード形式は、これまでに存在した最も古いマシンの多くで使用することもできます(もちろん、インターネットはサポートしていません)。

ただし、パーセントでエンコードされた文字は元の文字よりも長いため、実際には長いURLになる可能性があるため、マイナス面があります。ただし、それを無視するか、URL短縮サービスを使用してください(この場合、13文字の長いURLを作成する goo.gl をお勧めします)。また、Googleアカウントに登録したくない場合は、 bit.ly を試してください(bit.lyは、長さが14文字のわずかに長いURLを作成します)。

1
EKons

私にとってこれは正しい方法です、これはちょうどうまくいきました:

    $linker = rawurldecode("$link");
    <a href="<?php echo $link;?>"   target="_blank"><?php echo $linker ;?></a>

これは機能し、リンクが適切に表示されるようになりました。

http://newspaper.annahar.com/article/121638 -معرض--جوزف-حرب-في-غاليري-جانين-ربيز-لوحاته-الجدية-تبحث-وتكتشف-وتفرض-الاحتا

リンクが見つかりました:

http://www.galeriejaninerubeiz.com/newsite/news

0
Peter Manoukian