URLのUnicode文字


135

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

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

ただし、私の主なポイントは、見栄えの良いURLを提供することのみを目的として、エンコードされていない文字を提供することです。

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

  • テキストファイル、電子メール、さらにはエンコードが異なるWebサイトにコピー+貼り付けされたURL
  • HTTPクライアントライブラリ
  • エキゾチックなブラウザ、RSSリーダー

私の印象はここでトラブルが予想されるということで正しいので、技術者以外のユーザーにサービスを提供していて、引用されて伝えられた場合でもすべてのリンクが適切に機能することが重要である場合、(まだ)現実的な解決策ではありませんか?

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

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

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


16
その一部として、FirefoxはURLバーにUnicode文字を表示しますが、エンコードされた割合でサーバーに送信します。さらに、ユーザーがURLバーからURLをコピーすると、FirefoxはエンコードされたパーセンテージのURLがクリップボードに確実にコピーされるようにします。
Siddhartha Reddy、2010

回答:


126

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

編集: FirefoxでそのようなURLをコピーすると、クリップボードはパーセントエンコードされたフォームを保持します(これは通常良いことです)が、その一部だけをコピーすると、エンコードされないままになります。


うわー、実際にはあなたは正しいです!%エンコードされたURLをカットアンドペーストすると、Firefoxはそれを正しい表示に変換します。
ディーンハーディング

うわぁ、知らなかった。おそらくこれが最良の解決策です!
ペッカ

33
@Deanはかなり最近の変更です-2005年、すべての国際ウィキペディアは実際の%6D%65%73%73のように見えました。
ロマン・スターコフ2011年

2
これで、HTML5ドキュメントでエンコードされていないUTF-8 URL、つまりIRIを使用できるようになりました。これを行うと、すべての主要なブラウザがそれを理解し、アドレスバーに正しく表示します。
オリバー

最近のブラウザはリクエストラインでサーバーに何バイト送信しますGET /images/logo.png HTTP/1.1か?彼らは常にURLをパーセントエンコードしますか?
Flimm

87

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

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

これはURIではありません。しかし、それはあるIRI

HTML4ドキュメントにIRIを含めることはできません。のような属性のタイプは、hrefIRIではなくURIとして定義されます。とにかく、一部のブラウザはここでIRIを処理しますが、それは本当に良い考えではありません。

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

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

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

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

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

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

...そうですね。


31
知っている。ある日、誰かが大きなクラブを取り、それらのLynx開発者の頭を叩かなければなりません。優れた背景情報をありがとう。
Pekka

2
@bobinceそして、非IRI URIも処理できない1つのボット(2013年に早送り)は... ...そうですね、bingbot!図を行きます。
トムハリソン

1
HTML5は最終的にIRIをサポートします。この問題の詳細については、関連する質問に対するこの回答を参照してください
オリバー

5
Re:IEは常​​にきれいなIRIを表示するとは限りません-それらはホモグラフベースのフィッシング攻撃からユーザーを保護しています。w3.org/International/articles/idn-and-iri(特に「ドメイン名とフィッシング」セクション)とblogs.msdn.com/b/ie/archive/2006/07/31/684337.aspx
コーディングアウトラウド

2
ドメイン名はこれとは何の関係もありません。すべてのブラウザは、フィッシングを防止するためにさまざまな文字を許可していません。パスまたはクエリ文字列部分に非ASCII文字を表示しても、同様の脆弱性は発生しません。IEは単にそれを実装する気になりませんでした。(そして、Firefoxはフラグメント部分にもそれを実装した唯一のものです。)
Tgr

16

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

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

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

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

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


うーん、とても賢い考えです!それでも、一部のクライアントは文字列のどこに配置されているかに関係なく文字をチョークする可能性がありますが、URLをコピーして貼り付けたときの通常の文字化けに関するすべての問題解消されます。これが最も重要な部分だと思います。SOのURLをまだその方法で調べていませんでした。ありがとう!
ペッカ

まあ、これはまだ「質問」という単語を翻訳せずに残し、さらにハッシュ#の後にurl全体に続くものがありますが、非常に素晴らしいトリックです!!
エフゲニー

4
自動翻訳機を使ってその日本語のURLを作ったね。
Glutexo

6

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

たとえば、hrefドキュメントは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に対してはパスし、スペースのような文字を含むURLに対してはパスしません"a b"

関連:URLを無効にする文字はどれですか?


しかし、HTTPリクエストを正しく行う場合、両方のURL("你好""a b")をパーセントでエンコードする必要がありますか?
Utku 16

"a b"スペースが上記の許可リストにないため、@ Utkuは確かに「はい」と確信しています。については"你好"、パーセントエンコードの方が間違いなく優れていますが、「実装が十分ではない」という問題なのか、「標準ではそうなっている」の問題なのかはわかりません。HTML標準では、これらの文字が許可されているようです。しかし、これはHTMLではなくHTTP標準によって指定されていると思います。参照:stackoverflow.com/questions/912811/...
チロSantilli郝海东冠状病六四事件法轮功

はい、私はHTMLではなくHTTP標準を考えていました。
Utku 16

5

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

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


2
@Nasser:True-ドイツのドメインにも特殊文字があります-しかし、それらはPunycodeを使用してASCII文字にエンコードされます。それらが主要なブラウザで動作することは確実ですが、すべてのHTTPクライアントライブラリとエキゾチックなアプリケーションがエンコードされていないUnicode文字を処理できるようになるまでには長い時間がかかります。
ペッカ

@Pekka(私はわからないんだ)、私はわからないが、私は聞いたとして、ブラウザのすべては、2010年の第4四半期でのUnicode URLをサポートする必要が
ナセルHadjloo

すべてのユーザーエージェントがWebブラウザーであるとは限らないため、この問題は複雑です。最も大きな例はgoogle自体です。クロールを行うために一般的なWebブラウザーを使用しません。APIインタラクションなどのための多くのライブラリもそうです— URLは、WWW内だけでなく、文字通りどこにでもあります。たぶん今あなたのファイルシステムでも。
Cornelius 14年

1

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

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


Windows XPをまだ使用している古いコンピューターをサポートしたいのはなぜですか?
マテウスフェリペ

0

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

    $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


2
「リンクは適切に表示されます」-StackOverflowマークダウンパーサーがURLを意図したとおりに解釈しないことを除きます。
MrWhite 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.