ECWorks Blog

ECWorks Blog

CakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。

【Ktai】「Ktai Library」のちょっとしたTipsとか

icon_ktaiとりあえず版ということで、Ktai Library を公開したわけですが、思った以上に反響があり嬉しく思います。特に ktai.org さんに取り上げていただいたことでかなりのアクセス数があります(現在進行形です)。本当にありがとうございます。CakePHPフォーラムの方は、後で自作自演しようかと思いましたが、newsに先を越されてしまいました(笑)。こちらもありがとうございます。

とにかく急いで上げたためにいろいろと落ち度がありますが、そのフォローも含めていくつか情報を書きたいと思います。

■UTF-8で製作したページを無理矢理利用する方法

Ktai Libraryでは、今のところUTF-8での利用を推奨しておりませんが、(たぶん)使えないわけではないと思いますので、一応やり方を記載しておきます。試していないので、出来ない場合はご容赦を。

CakePHP1.1等古いバージョンでは、afterRender()内でob_get_clean()でアウトプットをゲットしてコンバートする手法が一般的ですが、最近のバージョンはこのやり方では出来ません。何故かというと、バッファにはまだ書かれていなくて、コントローラ内の$this->output内に格納されているからです。なので、afterRender()内で、$this->outputを、mb_convert_encoding()でコンバートします。

しかし、これだけでは「絵文字が化けてしまう」問題が発生する場合があります。化けるのは「文字コードを直接指定した場合」です。つまり数値指定(&#xxxxx;)の場合は大丈夫なはずので、これを利用すれば実現が可能だと思います(数値はShiftJISのもので)。ちなみに、Ktai Libraryを通すと、これらは全て文字コード等に変換されます。

■「機種判別」について

公開サイト内で「機種判別」と書いてしまって大変に申し訳なかったのですが、現時点で「キャリア判別」は出来ますが、「機種を特定する」ことはできません。
これについては、現在機種情報を調べる仕組みを準備しております。機種(AUはデバイスID)だけでなく、画面サイズなどの情報も入手出来ます。Ver0.0.2で搭載予定です。データは既に準備しましたので、あとは関数部作成と他の機能の作成待ちです。おかげでファイルサイズは5倍になりました(笑)。

■次バージョンの話

上記の機種判別の件もそうですが、次バージョン(Ver0.0.2)は次の機能がつく予定です。

  • 機種情報の入手(上記の通り)
  • PHS対応
  • 機種毎の表示画像のフィッティング

上から2つは確実ですが、最後のはもしかしたら落ちるかもしれません。
PHSとEMOBILEについては一部情報が不正確かも知れません(正確なデータが公開されていないため)。

■その他(言い訳とか)

なんか「Ktai Library」をインストールさえすれば、携帯サイトが出来てしまう…と思われがちなのですが、言い訳しますと、あくまでも「サポート」はしますが、実際には他にも自前でケアしないと出来ないと思います。例えばiMODEでは未だにPNG画像は表示できませんので、自前でファイルを選択するような記述は必要ですし、ページ構成の都合上、実質PCサイトとの振り分けは必要だと思います。
本ライブラリは、現時点では「毎度書いていた携帯関連の関数をライブラリ化した」程度のものですので、そのつもりでいただけると。もし「こんなのがあったら」というようなものは、コメント欄などで書いていただければ、頑張ってみたいと思います。

なお、「iMODE時のセッション対応」について、本来なら「これこそ」ライブラリーに搭載するべきなのですが、環境に依存する部分もあり、ライブラリとしての提供は少々難しいかと感じます。うまいやり方が思いついたら搭載します(もしくは、その部分部分をライブラリ化するのは有りなんじゃないかとも考えています)。


Tagged as: , , , , ,

2 Comments

  1. UTF-8で製作したページを無理矢理利用する方法ですが、CakePHP1.2でこんな感じに app_controller.php を作ってみました。

    app/controllers/app_contorller.php

    class AppController extends Controller {
    var $components = array(\’Ktai\’);
    function afterFilter(){
    if (isset($this->params[\’prefix\’])){

    }else{
    parent::afterFilter();
    $this->output = mb_convert_kana($this->output, \’rak\’);
    $this->output =mb_convert_encoding($this->output,\’sjis-win\’,\’utf-8\’);
    $this->Ktai->convert_emoji($this->output,$this->Ktai->get_carrier());
    }
    }
    }

    あとは、データ投入時にi-modeの絵文字コードに変換した上でUTF-8エンコード、DBに投入。取得時に SJIS-win に戻すようにすればいけそうですが、いかがでしょう?

  2. 具体的なソースコードの提供をありがとうございます。
    上記記事を具体的にやると概ねそんな感じかと思います。

    ちなみに気になったところですが、まずconvert_emojiの引数は、通常は省略してOKです。この引数は、デバッグとかで強制的に特定キャリアで出力した結果を見たいときとかに使うつもりでつけてあります。
    それから、convert_emojiの処理は、ktaiコンポーネントを入れていただくと、オプション指定で自動でやってくれます。この場合、文字コード変換処理はafterFilterではなくafterRenderでやっていただくと確実かもしれません。

    またUTF-8対応は、現在急ピッチで進めていて、早ければ今週中にも新バージョンが提供できるかもしれません。そうなれば、この辺の処理は全て自動でやってくれるはずです(オプション指定をすることでいろいろなケースに対応できる予定です)。