グローバル設定で日本語が消される  【解決済み】

質問全般・改善要望
返信する
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

グローバル設定で日本語が消される  【解決済み】

投稿記事 by kazuike »

1.0.5J-r2 をはじめてインストールしたのですが、
サイト名やメンテナンス中メッセージ等、
グローバル設定で日本語を入力して保存しても、記録されない。
という現象が起こっています。
半角英字だけだと問題なく記録されますが、
日本語を入力すると、それ以降が消えてしまいます。
リソースの作成等では、日本語でも問題ありません。

引き続き調べてみますが、
何か思い当たる事などあれば、教えてていただけるとありがたいです。
よろしくお願いいたします。

MODx:1.0.5J-r2
PHP:5.3.0
MySQL:5.1.40
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: グローバル設定で日本語が消される

投稿記事 by kazuike »

すみません。以下の設定で解決しました。
--------
php_value mbstring.internal_encoding UTF-8
--------
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: グローバル設定で日本語が消される

投稿記事 by yama »

system_settings・site_contentそれぞれのtableのデフォルトエンコード(というか照合順序)の設定はどうなってるか分かりますか?そこが合ってるとしたら(合ってると思う)、プロセッサの処理が両者で微妙に違う可能性がありますね。

管理画面の「ヘルプ」→「support」のタブで、「mbstring」と「MySQLの文字コード情報」がどうなっているか教えていただいてよいでしょうか。こちらで再現できれば修正してみます。
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: グローバル設定で日本語が消される

投稿記事 by kazuike »

yama さんが書きました:system_settings・site_contentそれぞれのtableのデフォルトエンコード(というか照合順序)の設定はどうなってるか分かりますか?そこが合ってるとしたら(合ってると思う)、プロセッサの処理が両者で微妙に違う可能性がありますね。
どちらも「utf8_general_ci」です。
yama さんが書きました:管理画面の「ヘルプ」→「support」のタブで、「mbstring」と「MySQLの文字コード情報」がどうなっているか教えていただいてよいでしょうか。こちらで再現できれば修正してみます。
以下のようになっています。
ヘルプ > support さんが書きました:mbstring
mbstring.detect_order auto
mbstring.encoding_translation 1
mbstring.func_overload 0
mbstring.http_input auto
mbstring.http_output EUC-JP
mbstring.internal_encoding UTF-8
mbstring.language Japanese
mbstring.strict_detection 0
mbstring.substitute_character

MySQLの文字コード情報
接続メソッド SET CHARACTER SET
文字セット照合順序 utf8_general_ci
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

mbstring.internal_encodingは、サーバの設定では「EUC-JP」です。
(.htaccessで「php_value mbstring.internal_encoding UTF-8」設定済み)
mbstring.substitute_characterは「no value」です。

よろしくお願いいたします。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: グローバル設定で日本語が消される

投稿記事 by yama »

kazuike さんが書きました:(.htaccessで「php_value mbstring.internal_encoding UTF-8」設定済み)
設定しない場合は、ここの値はどうなってますか?
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: グローバル設定で日本語が消される

投稿記事 by kazuike »

書き方が悪かったですね。
「EUC-JP」です。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: グローバル設定で日本語が消される

投稿記事 by yama »

ありがとうございます。おかげですぐにポイント特定できました(internal_encodingの件は失礼しました)。encoding_translationが有効になってるので、POSTで受け取った値によってサーバ側の判定がブレて、たまたま文字化けが起きるようです。スクリプト側で対応するほうがフレンドリーだと思うので、何か考えてみます。

※29日追記
たまたまではなくPOSTで受け取った時点で明示的に変換されるようです
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: グローバル設定で日本語が消される

投稿記事 by yama »

検証をお願いしてよいでしょうか。.htaccessを元のイレギュラーな状態に戻したうえで、

コード: 全て選択

foreach($_POST as $k=>$v)
{
	$_POST[$k] = mb_convert_encoding($v,'UTF-8');
}
上記のコードを /manager/includes/protect.inc.php の末尾あたりにでも追記して確認してみていただけますでしょうか。これでうまくいくようであれば、もう少しきっちりと書き直します。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: グローバル設定で日本語が消される

投稿記事 by yama »

投稿画面と処理を揃えるアプローチもあります

コード: 全て選択

<form name="settings" action="index.php?a=30" method="post">
/manager/actions/mutate_settings.dynamic.php 内の上記の部分を

コード: 全て選択

<form name="settings" action="index.php?a=30" method="post" enctype="multipart/form-data">
このように書き換えます。

コード: 全て選択

<form name="settings" action="index.php?a=30" method="post" enctype="text/plain">
(こっちのほうがよいと思います)

スニペット・チャンクなど他にもありそうなので、この機会に見直してみます
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: グローバル設定で日本語が消される

投稿記事 by kazuike »

yamaさん
ありがとうございます。

私としても、テストしたいのは、やまやまなんですが、
今となっては、ちょっと状況が厳しいです。
もしか、テストできましたら、報告させていただきます。が…
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
返信する