携帯サイトを構築する場合の、各キャリア対応をサポートするライブラリと、それをCakePHPで利用するためのヘルパー・コンポーネントを公開いたします。ライブラリ本体はCakePHPだけでなく他の環境でも使用することが出来ます。
【お知らせ】
ktailibrary.orgは諸事情ありまして閉鎖しました。
はじめに
携帯サイトを作成する場合、一般的には各キャリア向けにHTMLを作成し、それを振り分けして表示する仕組みを採用していたと思いますが、最近の携帯では、いくつかの仕様を除いてほぼ同じHTMLを閲覧することが可能になってきています。そこで、その「いくつかの仕様」についてを解決できるような仕組みができないものか…という経緯から、本ライブラリが生まれました。
また、本ライブラリは個人的に作成していたPHPライブラリがベースになっているのですが、CakePHPで使えるようにすることで「携帯サイトの高速開発」が実現できればと思い、駆動ヘルパー・コンポーネントも添付することにしました。逆に言えば、ライブラリ本体は他のPHPスクリプトあるいはフレームワークでも使えるかもしれません。応用が出来るような構成になっていますので、他でも活躍してくれれば幸いです。
概要
本ライブラリは、携帯サイトを構築する上で必要ないくつかの機能を提供いたします。
とりあえず、現在(Ver0.4.0)は次のようなことが出来ます。
- 各キャリア・機種で同じフォントサイズに調整 [New!]
- 絵文字キャッシュ
- ライブラリをサブクラス化
- IPによるキャリア判定
- Google Static Maps API支援
- convert_emoji()のアルゴリズム見直しによる高速化
- インラインスタイルシート支援機能
- XMLタグ対応
- URL処理を追加(コールバックによる付け替え可能)
- セッション対応
- セッション時のリダイレクト対応
- QRコード作成
- 携帯からuidを入手
- 自動変換処理関連でかな変換オプションを追加
- UTF-8対応
- 文字コード変換(UTF-8→SJIS、等)
- 機種情報(解像度などを調査)
- 高解像度携帯向けに画像を引き延ばし
- mailtoリンク作成の支援機能(件名や本文の挿入)
- PHS(一部)対応
- キャリア判別(携帯/非携帯の判別・各キャリア判別)
- メールアドレスからキャリア判別
- 絵文字の呼び出し(各キャリアに適した絵文字フォーマットを生成)
- ページを丸ごと絵文字変換
- 絵文字の出力をバイナリコードか数値表現かを選択可能
- accesskey付きリンクの作成(絵文字の自動挿入)[ヘルパー利用のみ]
- PC等でTypePadで使用されている絵文字画像の表示サポート
- インラインスタイルシートの挿入
動作環境
ライブラリ単体については、PHP4/5であれば動作可能です。
ヘルパー・コンポーネントについては、CakePHP1.2/1.3対応です。開発はCakePHP1.3.0にて行っております。
対応端末
対応携帯端末については、日本の各社3G携帯(docomo/au/softbank/emobile)およびiPhone、PHSを想定しています。それ以前の携帯はうまく動作しない可能性があります。
auのHDML対応端末は対応しておりません。
また、J-PHONE / Vodafone時代の携帯、Softbank初期(gif画像の表示できないタイプ)は絵文字の一部または全部が表示されない場合があります。
このため、公式サイトでこのライブラリをメイン使用するのは難しいかと思います(勿論有用な機能はあります)。どちらかというと勝手サイト向けです。
iPhoneを除くスマートフォン系端末・海外携帯には対応しておりません。PC扱いとなりますのでお気をつけください。また、PCブラウザ機能を用いてのアクセスも、PC扱いとなる場合があります。
インストール方法
インストールは、アーカイブをダウンロードしていただき解凍して出来たイメージをCakePHPに丸ごとコピーするだけです。
なお使いたい機能により、別途準備や設定値の変更が必要になる場合があります。
また、TypePadで使用されている絵文字画像を使用する場合は、別途ダウンロードし、app/webroot/img内にファイルイメージをコピーしてください。
利用方法
場合によって、いくつか設定や準備が必要になりますが、基本的には初期値で動作いたします。
設定変更は、コントローラ内に連想配列で設定値を用意していただくか、Configureクラスでヘルパーに設定値を送ることで行えます。
詳しくは、添付のドキュメントをお読みください。
絵文字はiMODE絵文字を使用してください。その他のキャリアが提供している絵文字は使用不可能ですのでお気をつけください(HTML内も変換はされません)。
絵文字入力に関しては、HTML内については直接コード入力する以外に、数字指定(&#xxxxx;)も識別いたします(オプションで有効にする必要があります)。また、絵文字挿入関数は、直接文字を指定する以外に、文字コードを数値入力していただくことも出来ます。
なお、利用例・チュートリアルについては下記記事をご覧ください。
▼【KtaiLibrary】各キャリア携帯サイトを世界一簡単に作ってみる
http://blog.ecworks.jp/archives/635
注意事項
SJIS / UTF-8以外の文字コードで生成されたviewテンプレートを変換する場合、AU携帯で文字化けするようです(EUC→SJISで再現しました)。これは本ライブラリ由来のものではなくmb_convert_encoding()が影響しているようですが、ご使用環境によってうまく利用できない場合がございますのでご注意ください。
PHS絵文字には対応しておりません。PCと同様の絵文字(代替テキストまたは画像絵文字)が表示されます。
ご利用条件
GPLライセンス規約に基づき、営利・非営利問わず自由にご利用可能です。
なお、メディア等への掲載については別途ご相談いただけますと幸いです。
ダウンロード
【プラグイン版】
CakePHP2系でのご利用にはKtaiLibraryのCakePHPプラグイン「CakeKtaiLibrary」をお使いください。
▼github : MASA-P / cake_ktai_library
http://github.com/MASA-P/cake_ktai_library
【開発版(ktai-dev)】
Ktai Library開発環境は、githubより入手が可能です。
▼github : MASA-P / ktai-dev
http://github.com/MASA-P/ktai-dev
※コード修正を随時行いpushしていきますが、Ktai Libraryの正式リリースでないことをご了承ください
なお、正式リリースバージョンと同一の開発環境はtagで入手できます
【最新版】
Ver 0.4.2 : githubにて公開
【以前のバージョン】
Ver 0.4.1 : githubにて公開
Ver 0.4.0 : githubにて公開
Ver 0.3.2 : githubにて公開
Ver 0.3.1 : githubにて公開 (公開されていますが、ktaiヘルパー等に問題があります)
Ver 0.3.0 : githubにて公開
Ver 0.2.3 : githubにて公開
Ver 0.2.2 : githubにて公開 (公開されていますが、リダイレクト処理に問題があります)
Ver 0.2.1 : githubにて公開
Ver 0.2.0 : githubにて公開
Ver 0.1.1 : ktai-0.1.1.zip
Ver 0.1.0 : ktai-0.1.0.zip
Ver 0.0.2 : ktai-0.0.2.zip
Ver 0.0.1 : ktai-0.0.1.zip
導入事例
相性占い.net (ひでまん様) [New!]
無料で相性占いができるサイトですが、占い師が300名以上登録されていて個別相談の依頼が可能。携帯サイト部分でKtai Libraryが使われているそうです。
Ping-tモバイル (nakagawa様)
CCNA(Cisco Certified Network Associate)、CCNP(Cisco Certified Network Professional)、LPIC(Linux Professional Institute Certification)各試験を学習できるサイト「Ping-t」のモバイルサイト。
エイゴノイド (yoshidax様)
携帯で英単語を学習するとキャラが成長していく!
学習方法も簡単で、手軽に英語が学べます。
テレビで見たよ (あつ様)
テレビで紹介された商品をまとめて紹介。もちろん購入もできるというサイト。
同じURLで携帯でも閲覧可能です。
こづかいつけーる for web (あんじー様)
簡単に登録できるこづかい帳。携帯からでも登録が可能です。
Pit-FM Mobile (Pit-FM様)
F1レースの情報をいち早くお届け! 毎レース決勝日はF1 PIT STOP CAFEにて観戦イベントを開催してます。
製作は私ことMASA-Pがさせていただいております(笑)。携帯サイト専用です。
※「Ktai Library」で製作したサイトを是非ご紹介ください。
英語でまとめました。
I wrote a summary in English.
http://blog.mobalean.com/2009/03/16/japanese-mobile-support-for-cake-php
Paul, thank you for your nice summary!
I have some reasons why the library code was formed in this way.
I had to exclude object oriented corresponding to PHP5 in order to support PHP4. Because CakePHP also supports PHP4. I think they are solved, if CakePHP supported only PHP5 (maybe version 2.0).
And then, the reason why there are functions(= wrapping functions) similar to a function of a library in a helper and a component, is that it is more than useful, if each different codes are necessary.
素晴らしいライブラリの公開、ありがとうございます!
それで、キャリア判別のEzwebの判別でちょっとだけ気になった点が。
昔のVodafoneの804SH,802SHで「UP.Browser」がUserAgentに含まれてる機種があります。
単体で「Ezwebかどうか」だけをチェックする時には、気をつけてた方がいいんじゃないかと思いました。
(今度、自分のブログでまとめてみます)
古い機種ですのであまり気にしなくてもいいかもしれませんが、念のため。
次バージョンも期待してます、頑張ってください!
ありがとうございます!!
不具合の件ですが、私の方でもそれを確認できました。
次のバージョンでしっかり修正させていただきます!
素晴らしいライブラリありがとうございます。
今後のバージョンアップもものすごく楽しみにしておいます。
ありがとうございます。大変に励みになります。これからもKtai Libraryをよろしくお願いします!(^o^)
大変有意義なライブラリありがとうございます。
AU/KDDIのOpenwave SDK6.2Kの端末エミュレータで
http://ktai-test.ecworks.jp/
を見てみたんですが。
ktai->linkで表示されるアクセスキーに対応する数字番号[1]-[9]が表示されない。
あと絵文字も、変換できてないようです。
おそらくそちらでもAU/KDDIのOpenwave SDK6.2Kの端末エミュレータで
再現できるとおもいます、
実機でどうかは、環境がないので確認できません。
実機では動作しているのでしょうか?
ご報告ありがとうございます。
SDK(6.2k)で試してみましたが、確かに文字化けしますね。
というか、なぜかUTF-8のページも全体的に文字化けします。
また、クッキーも非対応のようです。
文字化けの原因はいくつか考えられますが…
1:テストサイトでの絵文字の出力はバイナリUTF-8であり、SDKではバイナリ表示はできないのではないか?
→数値指定(&x????)で試してみる
2:テストサイト内は基本的にHTMLであり、XHTMLではない
→XHTML化するべき?
3:SDKの不具合
が濃厚であるのですが、実際にはまだ試していないので分かりません。
一応、実機で正常であった報告もあるので、個人的にはSDKの不具合であることを祈りたいです(^^;;;
(設定をいじっていたら固まってしまうし…)
ちなみに私はFirefox+MobileSimuratorでとりあえずチェックしているのですが、こちらでは表示できていて、はき出されたHTMLソースレベルで問題がない(意図したものが出ている)ことを確認しています。
自分の携帯はSoftBankなのですが、トラブル多いのでやっぱりAU端末を契約しようかなぁ…と思ったり。
どうもご確認いただいてありがとうございます。
Firefox+MobileSimuratorは使ったことが無かったのですが
見た目を携帯っぽく表示するエクステンションで、
レンダリング自体は、firefoxのエンジンをつかっているようなので
これで確認するのが正解なのかよくわかりませんでした。
こちらの環境ですが
おっしゃるとうり、UTF8だと文字化けするんで
UTF8-SJIS-winに変換してビューを出しています。
(そうすると、文字化けはなくなります)
絵文字ですが
はもちろん表示されます。
UTFコード(�)で指定すると表示されます。
また、引き続きコードをよんで調べてみます。
お忙しい所、お返事ありがとうございました。
別記事で書かせていただきましたが、実機(CA001)にて、絵文字及びUTF-8コードのページを正しく表示することを確認しました。やはりSDKの不具合っぽいですね。
0.2.0rc1 の lib3gk_emoji.php の DoCoMo絵文字番号で34「車」の絵文字のtypepad絵文字画像ファイル名の指定が car でなく、 car.gif と拡張子付きになっています。
ご連絡ありがとうございます。
確かに拡張子がついたままになっていました。
次のバージョンからは修正されていると思います。
(お急ぎの方は、「vendors/ecw/lib3gk_emoji.php」内の34番目の絵文字データ内に含まれている「car.gif」を「carに変更してください)
lib3gk->emoji() での docomo 絵文字バイナリ出力について
version: 0.2.0RC1
docomo でバイナリ出力が行えません。
同様な処理をしていると思われる、lib3gk->convert_emoji() とは処理が異なっていました。
– lib3gk->emoji()
if($carrier == KTAI_CARRIER_DOCOMO || !$binary){
– lib3gk->convert_emoji()
//if($carrier == KTAI_CARRIER_DOCOMO || !$binary){
if(!$binary){
また、前者だとiモードブラウザ2.0で対応しないSJISテキストでの出力となってしまうため、
デフォルトで出力されるモードを変更した方が良いかと思われます。
ご連絡ありがとうございます。
確かにこの部分のアルゴリズムはおかしいです。
もともと、SJIS←→UTF-8を実現する際に、まずdocomoベースの数値表現に置き換えてから文字コード変換をして、最後に数値表現を置き換えるように組む予定でした。バイナリ絵文字が存在する状態で文字コード変換を行うと文字化けしてしまうからです。おそらくその処理を入れる際に他のバグを作ってしまったように感じます。全体的にアルゴリズムを見直してみます。
ライブラリ単体(0.2.0RC1)使用で
Firefox+FireMobileSimulatorにて、検証しています。
絵文字にて、
SJIS【晴/】→ $ktai->emoji(63649);
UTF8【晴/】→ ??
何をどうしても、上手く表示されません。
UTF8の場合は、頭に0【ex. 晴/ → 0xe641】と書かないといけないのでしょうか?
お手数ですが、ご返答お願い致します。
ご質問ありがとうございます。
emoji関数の引数は、数値指定の場合は「数字」で、入れてください。
文字列で入れる場合は「バイナリ」と見なされます。
つまり、「$ktai->emoji(0xe63e)」が正解です。
大変有意義なライブラリありがとうございます。
サイトで使用させていただきたいと思います。
感謝します。
有用なライブラリ、ありがとうございます。
docomoのセッション周りでつまづいた点がありましたので、ご報告いたします。
ktai_session.phpの下記コードはPHPのバージョンによって動作しないようです。
PHP4.3.9で動作しませんでした。
ini_set(\’session.use_trans_sid\’, 1);
これを下記のブログを参考に、output_add_rewrite_varを使った記述を用いると、上記パージョンでも動作しました。
http://blogs.yahoo.co.jp/phper_gale/7212553.html
if(isset($_REQUEST[session_name()]) && preg_match(\’/^\\w+$/\’, $_REQUEST[session_name()])) {
session_id($_REQUEST[session_name()]);
output_add_rewrite_var(session_name(), $_REQUEST[session_name()]);
}
こちらこそ、有用な情報をありがとうございます。
session.use_trans_sidはini_setできない(場合がある?)というのは見落としていました。
上記を参考に、修正させていただきたいと思います。
URLがドメインの直下ではなく
http://example.com/test1/test2/
以下に設置した際に
携帯のredirectのURLが
http://example.com/test1/test2/test1/test2/redirect先?csid=
といった形になりました。
AppController側で
$url = Router::url($url);
を
$url = Router::url($url, true);
に変更することで解消されましたので、報告まで。
ご指摘ありがとうございます。
絶対アドレスになるように変更しました。
有用なライブラリの作成ありがとうございます。
lib3gk_emoji.phpの
//159
array(0xf3f0, 0xe82f, 0xecf0, 0x7a72, 0xedf0),
の部分ですが,
0xe82fは0xeb2fの誤りでしょうか??
たまたま見つけたので報告いたします。
ご指摘ありがとうございます。
確かに間違っています。
おそらくBと8を間違えたんだと思います。
すみませんでした。
githubにpushしました。
CakePHP 1.2.5でKtai Library 0.2.0を使用させていただいています。
DoCoMoのセッション周りで気づいた点がありましたので、コメントさせていただきます。
app_controller.php.ktai の redirect ですが、リダイレクト先にフルパスを指定した場合に、正しく遷移できないようです。
具体的には、$this->redirect(‘http://www.yahoo.co.jp/’); として呼び出した場合に下記のようなURLにリダイレクトされました。
Location: http://localhost/http:/index/pass~Array?csid=t81rmso4345hrb0mvbf7vh6nr0
自分の環境では、フルパスが指定された場合は他のサイトとみなして session_id の処理を行わないようにしました。
すいません、もう一つ気づきました。
$this->redirect(array(\’action\’ => \’edit\’)); のように配列形式でURLを指定すると、下記のようにarrayというコントローラ名で遷移してしまうようです。
http://localhost/Array?csid=59a97n1nteguasmhtb9km7r3k5
$url が配列の際も Router::parse($url); を呼んでいるのが原因だと思います。
私のところでは、さっきの件とあわせて下記のように直してみました。
あまりテストもしていませんが、ご参考になれば幸いです。
(配列形式でフルパス・・・というパターンは、指定方法が判らなかったので考慮していません。)
if(isset($this->Ktai) && (is_array($url) || !ereg(\’^[^/]+:\’, $url))){
if($this->Ktai->_options[\’enable_ktai_session\’] &&
($this->Ktai->_options[\’use_redirect_session_id\’] || $this->Ktai->is_imode())){
if(!is_array($url)){
$url = Router::parse($url);
}
ご連絡ありがとうございます。
redirectの件ですが、確かにご指摘の通りです。何故このようになってしまっているのかと言いますと、セッションキーを二重でつけないために試行錯誤でこのような形式になっております。当事この部分を手がけたときにちょっと分かっていないところがありましたので、是非見直して次のバージョンで解決したいと考えます。修正前の$this->redirect()と仕様が異なっているのはあまりよろしくないですよね(^^;
現在ちょっと修正をしている余裕がありませんが、抱えている案件が終了しましたらすぐに修正します。
こんにちは。
KtaiLibrary利用させていただいてます!
複数submit設置でセッションキーが消える!?の件を見て書き込ませていただきます。
この件と関連があるかどうかはわからないのですが
私の環境ですとsubmitが複数、単一に関わらず
docomoでのフォームからのポスト以降、
セッションIDが消えてしまいます。
どうも、hiddenで送られているセッションIDを受け取れていないように見えます・・・
例えばバリデーションで同一画面にリダイレクトされた際にはhiddenタグは消えてしまいます。
リダイレクトがない直接の遷移でも、リンクなどのurlからセッションIDが消えています。
この問題は上記に書かれている対応で回避できました。
問題とされている事象と違うので、この解決法で良いのか疑問に思い、書き込んだ次第です。
以上、よろしくお願いします。
コメントありがとうございます。
正直言いまして、私もその対処方法で良いものなのか、判断しかねる状況です。
しかし、「url_rewriter.tags」で不都合が解消されるようでしたらたぶんここの問題なのかと思います。
ところで、先ほどPHPマニュアルを見直してみたのですが、
「注意: HTML/XHTML strict に適合させたい場合には form エントリは削除し、 formフィールドの前後に<fieldset> タグを使ってください。」
とあるので、もしかしたらこの辺も関係があるかも???
続報です。
まだcake初心者なのではずしていたら申し訳ありません。
MASA-Pさんの報告を元に、
formエントリを削除し、
の形になるようにするも、うまく動作せず。
formヘルパーを利用して吐き出されるタグをちょこちょこいじって試してみたところ、
method=postの記述がなければうまく行く事が確認できました。つまり、get形式だと正常に動作します。
url_rewriter.tagsにform=actionを追加した際は、actionのURLに対してセッションIDが付加される形式のため、
getで渡っている=うまく行っているようです。
これを元に、
app/config/ktai_session.phpの
sesson_use_trans_sidメソッドの内部、
$_GETを$_REQUESTにする事で動作しました。
ここは、もっとうまいやり方があるかと思いますが・・・。
また、formヘルパーを利用し、postで送信の場合は
が自動で挿入される為、
url_rewriter.tagsにfieldset=があるとセッションIDがformタグとfieldsetタグに二重に吐かれているのも気になったので、
私の環境ではfieldsetのエントリは削除しました。
最後に見返してみたところ、
$_GETを$_REQUESTに変更のくだり、上でアイネットさんが書かれているコードとまったく同じになります。
以上です。よろしくお願いいたします。
すいません。タグを直接打ってしまいました。
また、formヘルパーを利用し、postで送信の場合は
<fieldset style="display:none;"><input type="hidden" name="_method" value="POST" /></fieldset>
が自動で挿入される為、
です。
なるほど、$_REQUESTにしないとうまくないのですね。
セッションキーをGETで固定した方が良いかなと思ってそのようにしてしまったのですが、そのようなからくりがあったとは…
修正しておきます。
ここについては逆に「ini_set(‘session.use_trans_sid’, 1)」じゃないと動かないケースもあるらしいので、何らかの対策をしないといけないとも思っていました。
上のほうで、ini_set(’session.use_trans_sid’, 1)が動かない場合を指摘させていただいたアイネットです。
私の説明不足で混乱が生じてしまっていたようで申し訳ないです。
$_REQUESTにしたのは、まさに、masatoさんのおっしゃられるとおりの意図です。
私もここの動作は基本、ini_set(’session.use_trans_sid’, 1)がよいと思っていますので、これが効かない場合にだけoutput_add_rewrite_varを使うようにすればよいかと思います。
ini_set(’session.use_trans_sid’, 1)はマニュアルによると
変更の可否:PHP_INI_ALL
変更の履歴:PHP_INI_ALL は PHP <= 4.2.3、PHP_INI_PERDIR は PHP < 5 から。PHP 4.0.3 から利用可能。
だそうですので、PHP_INI_PERDIRにあたるバージョンだとソースコードからは効かないので output_add_rewrite_var を使わないといけないようです。
4.0.3未満は・・・ノーケアでも大丈夫じゃないでしょうか(無責任)
コメントありがとうございます。
私の理解力不足でした。本当に申し訳ございません。
$_REQUESTに変更する件はやるにして、ini_setと合わせ技を行う方法をちょっと模索してみます。とりあえずfalseだった場合にoutput_add_rewrite_varを使う方向ですかね。
相変わらずこのマニュアルのバージョン表記が理解できていなくて、例えば自分のテストサイトに収録しているバージョンは5.2.6なのですが、ばっちりini_set効いている気がするんですよね。不思議だ…
寄付代わりに著作(デベロッパーズガイド)を購入しました。w
コードの勉強に使わせていただきます。
これからもがんばってください。
ご購入いただきましてありがとうございます。是非書籍の方活用されてください!
参考にさせていただいております。
セッションについて質問です。
Configure::write(‘Session.save’, ‘ktai_session’); とすることで、
CakeSession::__initSession の switch 文の default: で ktai_session.php が読み込まれる
…という仕組みだと思います。
この仕組みを利用する前提で、
さらに DB をセッションストレージにする方法を探っていて、しばらく疑問を抱えています。
CakeSession::__initSession の処理をみると、
ktai_session.php は if (empty($_SESSION)) の条件付きで読み込まれます。
ですが、(session_save_handler で)セッションストレージを DB にする処理は、
if (empty($_SESSION)) の条件無しで、確実に実行されるべきだと思っています。
http://d.hatena.ne.jp/cake67/20100209/1265689647
↑ こちらの方のブログにも、報告がありますが、
* Session.save で独自のセッション設定をする
* セッションストレージを session_save_handler で切り替える
の両立は、CakeSessionでは実現できない、
…と考えたほうが良いのでしょうか?
Cake側での対策が必要になり「Session.saveがカスタムの場合、$_SESSIONの内容に関係なく処理をさせないと困る場合がある」、旨のチケットを投げる必要があると思います。
ちょっと当方ですぐに試せませんので、大変にお手数ですが該当ソースを修正・検証してみていただけないでしょうか。
そして、お手数ですがその結果をフィードバックしていただけますと助かります。
Cake側へのバグ報告もお願いしたいところですが、もし分からない、難しいようでしたらお手伝い(もしくは代わりに報告)いたします。
ちなみに、session.php(cake_session.php)を、app直下にコピーすると、そちらの方を実行するようになると思います。もしコアコードが直らない場合は、Ktai Library側で修正コードを添付する方向で対処できたらと思います。
session の件、レスありがとうございます。
他に引っかかっている人がいないようなので、逆に不安になっていました。
時間がとれるのは来週くらいになりますが、検証結果はフィードバックします。
取り急ぎ、お礼まで。
たぶんKtai Libraryに関してはDBで使っている人が、CakePHP全般ではCustomのsession設定を使いつつ、$_SESSIONの内容に影響しない場合での駆動を想定したコーディングをされている方があまりいらっしゃらないからではないかと思います。
こればかりはCakeSessionをオーバーライドする以外、Ktai Library側でどうこうできる問題ではないので、すみません…
上記の件、チケット投げました。
また、合わせてsession_use_trans_sid()が、セッションが切断されると2度定義される問題についても(修正されれば)直ると思います。
http://cakephp.lighthouseapp.com/projects/42648/tickets/463-two-probrems-of-custom-session-in-cake_sessionphp
Ktaiライブラリーを利用させていただいてるものです。
とっても便利なので愛用させてもらってます。
本も買いました。
今回、SOFTBANKの新機種943SH(FireMobileSimuratorと実機種)で試したところ以下のようなエラーがでて画像が表示されません。
lib3gk_mashine.phpに携帯情報を追加すればいいのかな?と思い、追加したのですが、何も変わりません。
942SH(FireMobileSimurator)で試しても同じでした。
お手数をかけますが、新機種の設定方法、以下のエラーの回避方法を教えて下さい。
Notice (8): Undefined index: default [CORE/vendors/ecw/lib3gk.php, line 970]
Code | Context
$carrier_name = “SoftBank”
$machine_name = “default”
$default = true
$default = true;
}
$arr = $this->__machine->machine_table[$carrier_name][$machine_name];
Lib3gk::get_machineinfo() – CORE/vendors/ecw/lib3gk.php, line 970
Lib3gk::stretch_image_size() – CORE/vendors/ecw/lib3gk.php, line 263
KtaiHelper::image() – APP/views/helpers/ktai.php, line 137
include – APP/views/tops/index_ktai.ctp, line 4
View::_render() – CORE/cake/libs/view/view.php, line 666
View::render() – CORE/cake/libs/view/view.php, line 376
Controller::render() – CORE/cake/libs/controller/controller.php, line 803
Dispatcher::_invoke() – CORE/cake/dispatcher.php, line 230
Dispatcher::dispatch() – CORE/cake/dispatcher.php, line 194
[main] – /home/sites/*****/users/******/web/******/index.php, line 96
Notice (8): Undefined index: screen_size [CORE/vendors/ecw/lib3gk.php, line 264]
Code | Context
$width = “240”
$height = “100”
$default_width = 240
$default_height = 320
$arr = array(
“carrier” => 3,
“carrier_name” => “SoftBank”,
“machine_name” => “943SH”,
“default” => true
)
$arr = $this->get_machineinfo();
$sx = $arr[‘screen_size’][0];
Lib3gk::stretch_image_size() – CORE/vendors/ecw/lib3gk.php, line 264
KtaiHelper::image() – APP/views/helpers/ktai.php, line 137
include – APP/views/tops/index_ktai.ctp, line 4
View::_render() – CORE/cake/libs/view/view.php, line 666
View::render() – CORE/cake/libs/view/view.php, line 376
Controller::render() – CORE/cake/libs/controller/controller.php, line 803
Dispatcher::_invoke() – CORE/cake/dispatcher.php, line 230
Dispatcher::dispatch() – CORE/cake/dispatcher.php, line 194
[main] – /home/sites/*******/users/*******/web/*******/index.php, line 96
Notice (8): Undefined index: screen_size [CORE/vendors/ecw/lib3gk.php, line 265]
ご報告ありがとうございます。
確かにエラーが出ます。各キャリアで携帯の情報が無い場合にdefaultの情報が使われるのですが、SoftBankにこの情報が入っていませんでした。
新機種情報を収集して反映させた新バージョンを現在準備中で、今晩公開しますのでそちらをご利用ください。
新バージョン(0.2.2)にて無事、表示されました(^^
redirectの箇所も修正されていて快適です!
早速のご対応、ありがとうございました。
携帯電話のみでのキャンペーンサイト構築に利用させてもらいました。
大変助かりました。
運用していて携帯機種を取得できないことがあったのでお伝えしておきます。
lib3gk.php 531行目 if(preg_match(‘_DoCoMo/2\.0\s([\w]+)\(_’, $user_agent, $m)){
の preg_match の正規表現ではDocomoの「SO902iWP+」が判別できなかったため
if(preg_match(‘_DoCoMo/2\.0\s([\w\+]+)\(_’, $user_agent, $m)){
に変更しました。
今後のメーカーによるユーザーエージェントの付け方で条件を変えていかないといけないですかね?
ご報告ありがとうございます。
是非次のバージョンで修正させていただきます。
バグ情報・進捗については是非「http:://www.ktailibrary.org/」にご報告、またはご参照ください。
ktai libraryをソーシャルアプリで利用させていただいております。
このライブラリで、出力時にUTF8からshiftJISに切り替えているとおもいますが
テキスト入力で絵文字が入った場合に、それをPOSTで受け取った後
文字コードをUTF8に戻すと、絵文字が?になってしまうのですが
この文字コードの元に戻す処理を絵文字をそのままの状態で
行うことは出来ませんでしょうか。
ご質問ありがとうございます。
まず出来る出来ないの話は置いといて現象そのものについてですが、エンコード変換を行っているということで、ポストされた文字列はSJISのものであるのに対して、それを加工する(UTF-8化する)とUTF-8コードと見なして文字化けすることになります。残念ながら絵文字領域はUTF-8←→SJIS間でマッピングされていないため(国際標準ではないので仕方ないです)、mb_convert_encoding()では文字化けします。
このため、UTF-8でmb_convert_encoding()を行う前に、convert_emoji()で絵文字変換を行った方が良いでしょう。
オプションでバイナリではなく数値文字参照で出力する事が出来ますので、一度数値文字参照化してmb_convert_encoding()をかければ、絵文字の文字化けは防げます。
ただし、現在のバージョンではdocomo絵文字以外はコンバートできませんので気をつけてください。
将来のバージョンでは相互的に変換できる仕組みを考えています。
また、現在のバージョンはconvert_emoji()は絵文字変換のみでエンコーディングまでは面倒みませんが、現在準備しているバージョン0.3では文字のエンコーディングまで面倒をみます。あとSJISでの絵文字コンバートの際に発生する文字化けも無くなります。もうじき発表できると思いますので、こちらもご検討いただけますと幸いです。
v0.3.0にはapp_controller.php.ktaiが含まれてなかったので
v0.2.3からコピーしました。
変更はredirect関係だけなので問題ないかと思いますが
一応、ご報告します。
0.3から、ktai_app_controller.phpをextendsする形にしました。これは上書きコピーでapp_controller.phpを消さないことに加え、PCサイトと携帯サイトでapp_controllerを分けたいときに活用できるためです。なお、extendsする場合は自前でApp::import()をしてください。
現在携帯サイト構築にライブラリを利用させて頂いております。
以前も同じような書き込みがありましたが、今回サイト構築時に見つけたので報告させて頂きます。
lib3gk_emoji.phpの
//156
array(0xf3ef, 0xe82e, 0xecef, 0x7a71, 0xedef)
でうが、0xe82eは0xeb2eの誤りかと。
ご確認よろしくお願いします。