- 2005-03-08 (火)
- Web And Technology
最近 Bloglines なるサービスを知り便利に使ってるのですが、自分のサイトに埋め込める Blogroll Javascript が Internet Explorer (IE) だとうまく表示されない(Javascriptエラーが出る)事に気づきました。なんだ?と調べてみたところ、
Blogrollスクリプトが出力するソースの文字エンコードは「UTF-8」なのに対して、貼り付け先のHTMLの文字エンコードが「EUC-JP」になっていた
事が原因でした。
僕んとこは EUC-JP だったので上記症状でしたが、Shift-JIS なページの場合は文字化けが起こります。Blogrollのスクリプトは UTF-8 しか対応していないようだったので、「文字コード変換CGIかますか」等と悩んだりしてたのですが、超簡単解決方法を紹介しているBLOG記事を発見。以下 Queer TOSA Diary さんの記事「BloglinesのBlogroll設置!」より引用 :
生成されたコードに「charset="utf-8"」と付け加えることであっさり解決。日本語のサイト名の文字列を数値文字参照に変換する必要も無し。とりあえずぼくの環境ではちゃんと表示できるようになりました♪
まあ素敵。まあ簡単。
<script language="javascript" type="text/javascript" src="http://rpc.bloglines.com/blogroll?id=bashi&target=_blank" charset="utf-8"></script>
<script> タグに charset 属性で文字コード指定が出来るんだ... 初めて知った。というわけで Queer TOSA Diary さん感謝です。
Safari やその他ブラウザでの解決方法 (2005/03/10追加)
エントリ書いた後早々、 joe さんから「Safariだと上記方法でも駄目でした」とコメントいただきました。こういう風に反応あると嬉しくなっちゃいます。joeさんありがとう♪
どうやら 上記対応方法はI.E.でしか有効では無いようです(I.E.独自仕様)。どんなブラウザでも正常動作させるにはやはり
blogroll Javascript の文字コードと、貼り付け先HTMLの文字コードを一致させる
しか無いかと。そこで、Bloglines の提供するブログロール機能に「任意の文字コードへの変換機能」を持たせたラッパーを用意。このCGIをかます事で Safari でも正しく表示されるようになります(動作確認OK)。
#!/usr/bin/perl use strict; use CGI; use HTTP::Lite; use Jcode; ### parameters ### my $q = new CGI; my $enc = ($q->param("encoding"))? $q->param("encoding") : "euc"; my $url = "http://rpc.bloglines.com/blogroll?" . $::ENV{QUERY_STRING}; ### get & encode ### my $http = new HTTP::Lite; my $req = $http->request($url); print "Content-type: text/plain\n\n"; print Jcode->new($http->body,"utf8")->$enc;
上記ソースを bloglines_jp.cgi としてサーバに保存、ファイル権限に実行権限を追加 (chmod +x bloglines_jp.cgi) した上で、Bloglines が提供するコードの src 部分中 ? までの文字列を同CGIへのパスに置き換える&任意の文字コードをパラメータ "encoding" として指定します:
<script language="javascript" type="text/javascript" src="http://rpc.bloglines.com/blogroll?id=bashi&target=_blank">
</script>
太字部分を bloglines_jp.cgi へのパスに置き換える & encoding パラメータ
に任意の文字コードを指定する (euc | sjis) ↓
<script language="javascript" type="text/javascript" src="/path/to/bloglines_jp.cgi?id=bashi&target=_blank&encoding=euc" >
</script>
うまく動かなかったり、CGI設置が面倒くさい場合は僕が使ってる、iandeth. 上の bloglines_jp.cgi をそのまま呼び出しちゃってもかまいません。その場合はcgiへのパスを /path/to/bloglines_jp.cgi では無く、以下のパスに置き換えてください:
http://iandeth.dyndns.org/mt/ian/cgi/bloglines_jp.cgi
※根本解決策? : 世の流れに従って、iandeth. もUTF-8にすべきなのかなぁ...
- Newer: Movable Type のER図(Entity Relation Map)を作ってみた&テーブル定義まとめてみた
- Older: Movable Type + MySQL 4.1 を組み合わせると日本語が文字化けする不具合/障害の解決方法
Comments:3
- joe 2005-03-09 (水) 05:11
-
TB頂きまして、ありがとうございます。
私も早速試したのですが、私のブラウザーではうまくいかなかったので、結局実体参照のままです。残念!
ちなみにブラウザーはSafari。
なんでだめなんだろう・・・。
- joe 2005-03-26 (土) 20:16
-
おひさしぶりです。
ご丁寧にありがとうございます。すごーく、魅力的ではあるんですが、やっぱりcgiまでやるのは初心者のあたしにはめんどくさいかも・・・。
ということで今回はそれでも考えてたんですが(笑)、やっぱり導入見送りますね。でも、素晴らしいです!こんなに早くに丁寧な解説までしてくださったこと、感動しました!
これからもどうぞ宜しくお願いします(笑)。 - CXQ02002 2005-04-14 (木) 12:52
-
ありがとうございます。昨晩から戦っていたんですが、文字コードでしたか。一発で解決。