構成するシステムの処理の流れとしては次のような感じです。
1.JavaScript によるブックマークレットでタイトル文字列を自動取得
2.PHPによる情報の受け取り(フレームワークとしては CakePHP を使用)
3.MySQLによるデータの保管と呼び出し
ソーシャルブックマークと類似の仕組みと考えてもらえれば問題無いと思います。
一般的な対処法、ケーススタディ、または文字化け対策された標準化されたライブラリやその使い方などのノウハウがあれば、ぜひこの人力検索を通じて共有していただければと思います。また、今回はブログエントリの回答に対してコメントをお寄せいただく方にポイントを付与するという実験も兼ねておりますので、問題に解答することよりもポイントを取得することを目的とされている方の回答はご遠慮願います。
親ブログエントリ:多様な文字コードの対象を Bookmarklet で取得するシナリオ ( ラボブログ )
http://blog.spicebox.jp/labs/2009/02/_bookmarklet.html
ブックマークレットから文字コードを送信すれば Web のタイトルを文字化けせずに取得することが出来ると考えます。コード例を提示します。
if(navigator.appName=="Microsoft Internet Explorer"){ alert(document.title + "," + document.charset); }else if(navigator.appName=="Netscape"){ alert(document.title + "," + document.characterSet); }
このコードは、ブラウザで表示しているサイトのタイトルと、そのサイトを表示しているときに使用した文字コードをアラートボックスに表示します。このコードをブックマークレットとして登録し、IE6 で実行した例は http://f.hatena.ne.jp/tsukasa57/20090216195024 になります。
ここでは、Google のトップページを使いましたが、Google の文字コードは UTF-8 であり、文字コードも表示できています。もし、同じページを SHIFT-JIS で表示させた状態でブックマークレットを使用すると http://f.hatena.ne.jp/tsukasa57/20090216195025 のようになります。この例では、アラートボックスは SHIFT-JIS になっています。
つまり、ユーザがブックマークレットを実行したときの文字コードがタイトルと同時に取得できます。サーバー側で送られてきた文字コードを見れば、サイトのタイトルもわかると思います。要するに文字化けの対応をユーザ側に任せていることになるわけで、一般的にはそれでも良いんじゃないかなと思います。
※本解答は「日本語サイトのタイトルを、ブックマークレット経由で文字化けを起こさず取得する方法」だけを述べています。説明の都合上、話を簡単にするためにコード例はアラートボックスを表示するだけにとどめています。「ソーシャルブックマークと類似の仕組み」を実装する場合は、当然アラートボックスの部分を変更する必要があります。
※上記例では Internet Explorer と Mozila Firefox にしか対応していません。他のブラウザにも対応させる場合は、例えば http://d.hatena.ne.jp/tnishimu/20070405/1175766277 で紹介されているようなコード(Opera)を追加する必要があります。