BlogCakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。(木)【CakePHP/KtaiLibrary】複数submit設置でセッションキーが消える!?session.use_trans_sidがらみでまた問題が確認されました。これは大変に不思議なことなのですが、フォーム内に複数のsubmitを設置したい場合があると思うのですが、この場合にどちらか片方(おそらく最後にあるもの「以外」のもの)を押した場合、クエリストリング中のセッションキーが消えてしまう、という現象に遭遇しています。submitが一つだけ存在する場合、もしくは最後のsubmitを押した場合は問題がないのです。携帯サイトの場合、docomo携帯で一部フォームで正常に動かなくなる事態に遭遇する、というわけです。いろいろなケースで試してみたのですが、結局分からず。最終手段として、「url_rewriter.tags」を変更することで、セッションキーが継続され、問題解決ができました。Libraryの「app/config/ktai_session.php」の末尾にある設定箇所を変更します。'a=href,area=href,frame=src,input=src,form=action,fieldset=');ところで、「fakeentry」というパラメータはなんなんでしょうかね?これはデフォルトのPHP設定なのですが。「action」ではないのか、私には分かりません。この件に関しては、ライブラリの修正はちょっと待って、しばらく様子を見ようと思います。変更することによる影響が分かりませんので。問題ないようなら更新したいと思います。Libraryですが、なんか知らない間に海外サイトに取り上げられたようです。moduleのようになっていない)」みたいなことが書かれていますが、言い分は何となく分かるのですが、それをあえてやっていない理由をくみ取っていただけなかったのは残念だなぁ...「キャリアコード」云々と言っている部分は意味が良く分からなかったんですが、要は「もっとシンプルに書ける」って事でしょうか。「キャリアコード」というのは後から書いた部分なので、無駄があるのは承知してますので、今後の対応ですかね。大人げなく反論してみました(^^;;;というか、海外でダウンロードされることはまったく予期していなくて、しかも国内よりも早く、具体的にソースの感想が述べられていたのは驚きでした。公開したわけですが、思った以上に反響があり嬉しく思います。さんに取り上げていただいたことでかなりのアクセス数があります(現在進行形です)。本当にありがとうございます。CakePHPフォーラムの方は、後で自作自演しようかと思いましたが、newsに先を越されてしまいました(笑)。こちらもありがとうございます。急いで上げたためにいろいろと落ち度がありますが、そのフォローも含めていくつか情報を書きたいと思います。Libraryでは、今のところUTF-8での利用を推奨しておりませんが、(たぶん)使えないわけではないと思いますので、一応やり方を記載しておきます。試していないので、出来ない場合はご容赦を。CakePHP1.1等古いバージョンでは、afterRender()内でob_get_clean()でアウトプットをゲットしてコンバートする手法が一般的ですが、最近のバージョンはこのやり方では出来ません。いうと、バッファにはまだ書かれていなくて、コントローラ内の$this->output内に格納されているからです。afterRender()内で、$this->outputを、mb_convert_encoding()でコンバートします。これだけでは「絵文字が化けてしまう」問題が発生する場合があります。化けるのは「文字コードを直接指定した場合」です。数値指定(&#xxxxx;)の場合は大丈夫なはずので、これを利用すれば実現が可能だと思います(数値はShiftJISのもので)。Libraryを通すと、これらは全て文字コード等に変換されます。■「機種判別」について公開サイト内で「機種判別」と書いてしまって大変に申し訳なかったのですが、現時点で「キャリア判別」は出来ますが、「機種を特定する」ことはできません。これについては、現在機種情報を調べる仕組みを準備しております。機種(AUはデバイスID)だけでなく、画面サイズなどの情報も入手出来ます。Ver0.0.2で搭載予定です。データは既に準備しましたので、あとは関数部作成と他の機能の作成待ちです。おかげでファイルサイズは5倍になりました(笑)。上記の機種判別の件もそうですが、次バージョン(Ver0.0.2)は次の機能がつく予定です。機種毎の表示画像のフィッティング上から2つは確実ですが、最後のはもしかしたら落ちるかもしれません。PHSとEMOBILEについては一部情報が不正確かも知れません(正確なデータが公開されていないため)。Library」をインストールさえすれば、携帯サイトが出来てしまう...と思われがちなのですが、言い訳しますと、あくまでも「サポート」はしますが、実際には他にも自前でケアしないと出来ないと思います。iMODEでは未だにPNG画像は表示できませんので、自前でファイルを選択するような記述は必要ですし、ページ構成の都合上、実質PCサイトとの振り分けは必要だと思います。本ライブラリは、現時点では「毎度書いていた携帯関連の関数をライブラリ化した」程度のものですので、そのつもりでいただけると。「こんなのがあったら」というようなものは、コメント欄などで書いていただければ、頑張ってみたいと思います。「iMODE時のセッション対応」について、本来なら「これこそ」ライブラリーに搭載するべきなのですが、環境に依存する部分もあり、ライブラリとしての提供は少々難しいかと感じます。うまいやり方が思いついたら搭載します(もしくは、その部分部分をライブラリ化するのは有りなんじゃないかとも考えています)。(木)【プログラミング関連】FirefoxでUTF-8以外が文字化けする原因(の1つ)最近、仕事で携帯サイトを作っていて、CakePHPを用いて製作しているのですが、ShiftJISでコーディングしているのですがなぜかFirefox「だけ」文字エンコーディングがUTF-8に強制的にされてしまうことで悩んでいました。話題がはてブの新着に上がってきているんですが、結局このときは良く分からないままそのままになってしまっていたんですよね。今回のこの件も、別にPCから見れる訳ではないので気にしなくても良い問題なのですが、とはいえ何だかあまり気持ちが良くないので、少し調べてみることにしました。おかしいのは、いくら内部エンコーディングがShiftJISになっていても、header()で書き込んでも、何をしてもUTF-8にされてしまう点です。IE、Safari(iPhone)、実機携帯(今回はSoftbank920Pをメインにチェックしてます)では問題がないのです。不思議なのは、ページによってこの現象が出る所と出ないところがある点。トップページは出ないのですが、例えば画像だけしか表示しないようなページだと、ナビ用のテキスト(「戻る」とか)が化けます。それとも「SJIS」?そうなんです、Firefoxは、このcharset文字列がかなり厳密で、「Shift-JIS」もしくは「Shift_JIS」でないとNGらしいのです。私はPHPマニュアルでmb_???系の解説で「sjis」と記されているので、ずっとsjisと書いていたのですが、これが引っかかっていたようです。分かりにくいのは、sjisと書いても文字化けにならないことがあり(というか今までならなかった場合が圧倒的に多かった)、これについては原因は特定できていないのですが、一番最初の文字列だとか、頻度だとか、そういった要因で自動判別に引っかかり、「たまたま」文字化けが起きていなかっただけなのかもしれません。「ShiftJIS」「SJIS」はNGなのです。仕様でもしっかり「Shift_JIS」と書かれていて、これが正式のようです。本来「Shift_JIS」と書くべきなのでしょう。ShiftJISで書く機会は減ってきていると思いますが、携帯サイトなどではまだまだ現役でしょうから、気をつけた方が良いですね。ちなみに他のブラウザは寛大で、「ShiftJIS」「SJIS」は認識します。内部でしっかりとエイリアスされているのかもしれません。CakePHP1.2公開お待たせしました!CakePHP1.2用の携帯ライブラリを公開いたします。!昨日公開のつもりでいましたが、アーカイブ一式を自宅に忘れてしまい、昼アップが出来ませんでした。ソースの手直しできる時間が出来たため、昨晩改良を行い、コンポーネントも作成したりと若干パワーアップしました。メアドチェックの3種類しかできないのですが、少しずつバージョンアップしていきますので、宜しくお願いいたします。ちなみに、開発中にいくつか有用なTipsが見つかりましたので、後日ご紹介したいと思います。(木)【ktai】携帯ライブラリ&CakePHP1.2用ヘルパーの公開(予定)サイトの方が準備できてしまったので、先にサイトを公開いたします。表題の通り、CakePHP用の携帯サイトヘルパーです。ダウンロードは明日(12日)昼までには出来るようにします。