■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。
このフォーラムは閲覧専用のアーカイブです。

セットアップ完了後、管理画面でページ編集を行うと文字化け発生

takah > セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/4/30 7:44
初めまして。

システム設定>サイト基本設定から
・WEBサイト名
・サイト基本キーワード
を入力し「更新」ボタンをクリックすると文字化けしてしまいます。

Ver1.5.7をDLしドキュメントルート直下に展開しインストール手順に従いセットアップし
管理画面から初めてデータ編集を行おうとしたタイミングで発生しました。

・app/config/core.phpのencodingはutf8
・show create database baserの結果は「DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci」
・サイト基本設定画面内のHTML METAで指定されているcharsetはutf-8
まで確認しております。

何か原因等考えられますでしょうか。

<追記>
ちなみに
ページ管理>初期設定されてるページ(例えば、「会社案内」)
で「タイトル」、「説明文」フィールドで登録した情報も同様に文字化けしております。

ryuring > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/4/30 13:08
こんにちは。
サーバー環境は、レンタルサーバーですか?
それとも独自のサーバーですか?

php.ini の mb_string の設定が怪しいですね。

特に、mbstring.encoding_translation が、Onになっていると、送信データを内部エンコーディングに無理やり変換して文字化けの原因になる事が多いです。

mbstring.http_input = pass
mbstring.encoding_translation = Off

になっているか確認してみてください。

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

takah > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/4/30 13:32
ご返信頂きましてありがとうございました。

独自サーバーへインストールしております。

php.iniのmb_string周りは特に変更しておりませんのでデフォルト設定のままでした。

確認しましたが
mbstring.http_input = pass
mbstring.encoding_translation = Off
となっております。



ryuring > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/4/30 13:52
もちろん、MySQLはMySQL4.1以降をご利用ですよね?

phpMyAdmin等で確認したデータも文字化けしてますか?

アナログな手段ですが、送信されたデータを受け取った時点でどのような状態になっているか確認した方がいいと思います。

/baser/controllers/app_controller.php の 370行目あたりに、__convertEncodingHttpInput という関数があります。

その中で送信されたデータを確認してみてください。

次のコードを関数内の1行目に貼り付けて、データの更新を実行してみてください。

var_dump($this->params['form']);
var_dump($this->params['data']);

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

takah > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/4/30 19:23
ご返信ありがとうございます。
MySQLは5.0.77です。
phpMyAdminでは文字化けしません。

確かに仰るように各ステップで確認してみようと思います。

ご指摘の/baser/controllers/app_controller.php内__convertEncodingHttpInputでvar_dumpした
ところ
var_dump($this->params['form']);
var_dump($this->params['data']);
のいずれも結果は「NULL」で帰ってきます。

/baser/controllers/site_configs_controller.php
の70行目にあるfunction admin_form()内の以下条件式部分で
var_dumpしたところ、フォームデータ送信しているにも関わらず
if(empty($this->data)){}内の処理に入っており、
$this->data['SiteConfig'] = $this->siteConfigs;の前後で試しに
$this->data['SiteConfig']['name']をvar_dumpしたところ
$this->data['SiteConfig'] = $this->siteConfigsの前では
「name」というパラメータ名がセットされ
$this->data['SiteConfig'] = $this->siteConfigsの後では
文字化けーデータがセットされています。

if(empty($this->data)){
$this->data = $this->SiteConfig->read(null, 1);
$this->data['SiteConfig'] = $this->siteConfigs;
$this->data['SiteConfig']['mode'] = $this->readDebug();
}

恐らくフォームデータが存在する場合なのに、空だという条件分岐に入ってしまい
DBから以前文字化けされたデータをフィルインさせてるのではないかと想像するの
ですが、まだ各ステップ全てをトレースしきれていません。

さらにデバッグしてみます。
ryuring > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/4/30 19:34
ご尽力ありがとうございます。

ちなみにCakePHPの仕様として、$_POSTのデータをディスパッチャーあたりで、

$this->params['form']
$this->params['data']


に入れ込むようになっています。

同箇所あたりで
$_POST内のデータをダンプしてもらえますか?

また、もしかしたら私が問題の内容を勘違いしている可能性もありますので、
文字化け画面のスクリーンショットを頂けますか?

よろしくお願いいたします。

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

takah > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/5/1 13:54
何度もご返信ありがとうございます。

admin/site_configs/formのPOST時ってDB登録後に自身へ302りダイクレとしてるの
見逃してました。。。

var_dumpで出力されなかったのは初回時はブラウザ画面へ帰ってこず302した後のPOST
データがないものをvar_dumpしてたからNULLになってたんですね、、、当たり前のこと
でした。

で、最初にご指摘頂いてた「_autoConvertEncodingByArray」前後で文字化け状況を
以下のように確認したところ
fwrite($fp, $this->params['data'][SiteConfig][name]);
$this->params['data'] = $this->_autoConvertEncodingByArray($this->params['data'],'UTF-8');
fwrite($fp, $this->params['data'][SiteConfig][name]);

最初のfwrite時は文字化けしてない状態で、最後のfwrite時に文字化けしておりました。

そこで、function _autoConvertEncodingByArrayの処理をさらにトレースしたところ
$value = mb_convert_encoding($value, $outenc, $inenc);
の前後で文字化けており$inenc,$outencを確認してみるとutf-8でデータ送信してるにも
関わらず、$inencがSJISとなっておりました。

php.iniで「mbstring.detect_order = auto」を設定していなかったためfunction _autoConvertEncodingByArrayの行頭に
mb_detect_order('auto');
を追加すると無事$inencがUTF-8を検出できまして、やっと文字化け解消しました。。。

お騒がせしました。

また、色々とご教示頂きましてありがとうございました。


ryuring > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/5/1 23:06
なるほど・・・。そういう事だったんですね。

この処理は、まだUTF-8が主流になる前、文字化けに悩ませられている頃に書いたものですが、
最近だと、UTF-8でデータが送信される前提が多いので、この処理自体いらないかもですね。
負荷軽減の為にも。

調べてみると、mbstring.detect_order = auto の信頼性がないという記事もありましたし。
http://project-p.jp/halt/anubis/blog_show/406

検討が必要ですね。

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

takah > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/5/2 0:24
>調べてみると、mbstring.detect_order = auto の信頼性がないという記事もありましたし。

そうなんですよね。
でも入力文字コードを100%確実に判定させる方法は、文字コードの成り立ちからして無理があるので
ユーザーに指定させるか、100%判定がぶれない文字を常にhiddenで送信しておきそれを入力文字コー
ドの判定用に利用させるとかすればよいんじゃないかなーと思っています。

何はともあれありがとうございました。

ryuring > Re: セットアップ完了後、管理画面でページ編集を行うと文字化け発生 @ 2010/5/2 2:12
結局、次の記事を参考に、mb_detect_encoding で明示的に指定する仕様に変更しました。
http://www.cpa-lab.com/makebyblog/mt-contents/2007/09-2833.php

修正ファイルは次のURLからダウンロードできます。
http://project.e-catchup.jp/issues/933

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ