url に日本語が含まれている場合の Firefox と IE の挙動の違い。

河馬(かば)。天王寺動物園にて。河馬は凄い人気がある動物ですね。常に人だかりができています。
 現在,トラックバックを管理するサービスを構築中なのですが併せてテクノラティとの連携(tagの利用)を進めている中で,困った問題が出てきました。

 というのは,テクノラティは http://www.technorati.com/tag/**** というuriで,**** という tag を持つ blog の一覧にアクセスすることができるのですが,**** の部分が日本語だと正常に tag の文字情報が認識されません。
e.g. http://www.technorati.com/tag/日本丸 → http://www.technorati.com/tag/%93%FA%96%7B%8A%DB

 %93%FA%96%7B%8A%DB はshift-jisの文字列に対するurlエンコード結果なのですが,テクノラティで直接検索窓を利用した結果は,「%E6%97%A5%E6%9C%AC%E4%B8%B8」という文字列になります。

 これは多分 UTF-8の「日本丸」のurlエンコードだと思うのですが,この変換を行ういい方法が見つかりません。basp21を使って文字列の文字コードをUTF-8に変換した状態で,Server.URLencode関数 で変換したものではコードが異なってしまいます。難しい。

 ふと,インターネットエクスプローラーだとどうなるんだろうという疑問が頭をよぎり,http://www.technorati.com/tag/日本丸 という uri からリンクを辿ってみると,何の問題もなく「tag:日本丸」として解釈されていました。

 インターネットエクスプローラーは,見えない部分で,いろいろ補助的なことを行ってくれるのでその一環なのかもわかりませんが,Firefoxとは異なる,なにか特別なことをやっているのでしょうか。

 というのも,urlエンコードは,同じ文字でも文字コードによって変換されるコードが異なりますので,相手先の文字コードを確認してからエンコードをかけないと正しい変換ができない筈です。ということは,IEは相手にデータを送る前に文字コードの変換を行っているのか,逆にFirefoxは相手の文字コードも分からないのにurlエンコードを行っているのか(現状ではそのようです),という疑問が出てきます。

 んー,謎。

 本来であれば,urlエンコードをした上で,uri に引き渡すべきなのですが,生の文字列で行けるのであれば,それはそれで便利かつ確実(本末転倒ですが)なので,使える方がありがたい。

 さてさて,なにが原因なのでしょうか?

This post is trackbacked to [Firefox People] [photo people*] .

Techorati Tags: : Cosmos

コメント

Hit さんの投稿…
macだと、safariでもfirefoxでも、アドレスバーに日本語を含む文字列を入れてもちゃんとtagを認識してくれています。

safariだと、アドレスバーは日本語で/tag/日本丸のまま、firefoxだと、/tag/%E6%97...になりますが、ページの表示結果は同じです。
touji さんの投稿…
Win使いですが、IEだとインターネットオプションの詳細設定タブの中で、
ブラウズ>常にUTF-8としてURLを送信する
という項目があります。チェックしないと確かSHIFT-JISエンコードします。
この設定はIE 5.5あたりで追加されたような記憶があります。

Firefoxにもその選択ができる方法があるのか知りませんし、
また問題が認識できているのかはBugzilla-jpを調べてみないとわかりませんね。

そもそもURLに日本語文字を入れる場合にどの文字コードとして解釈するかなんて規格はないのでしょう。だから直接生値を送らないといけないのではないかと。
OpenCage さんの投稿…
 urlは基本的にはエンコードしなければならないものなのだそうです。(tidyではurl変数を&(アンパサント)で繋げても怒られます。)
→mozillazineでの関連記事

 どうも,winとLinux版のFirefox(mozillaでも再現)というかGekkoエンジンでは表示画面の文字コードに合わせてurlエンコードされているみたいですね。

 試しにutf-8のファイルを作って試してみるとutf-8をurlエンコードしたものになりました。

http://www.technorati.com/tag/%E6%97%A5%E6%9C%AC%E4%B8%B8

このブログの人気の投稿

2才5ヶ月の息子の絵が上手すぎる!

Nexus 5X が起動しなくなり、Sony Xperia XA1 Plus を買ったのだがカメラが残念すぎる。

何故MSはOffice Document Imaging を捨てたのか、、、

子供が腸重積(ちょうじゅうせき)に

Firefox urlエンコード機能をUTF-8化する方法。

Nexus 9の熱暴走癖、バッテリーが少ないと発生しやすいようだ。

インド料理の食べ方

Xfce環境でCaps LockをCtrlに変える。