ページ 1 / 1
グローバル設定で日本語が消される 【解決済み】
Posted: 2011年3月25日(金) 21:16
by kazuike
1.0.5J-r2 をはじめてインストールしたのですが、
サイト名やメンテナンス中メッセージ等、
グローバル設定で日本語を入力して保存しても、記録されない。
という現象が起こっています。
半角英字だけだと問題なく記録されますが、
日本語を入力すると、それ以降が消えてしまいます。
リソースの作成等では、日本語でも問題ありません。
引き続き調べてみますが、
何か思い当たる事などあれば、教えてていただけるとありがたいです。
よろしくお願いいたします。
MODx:1.0.5J-r2
PHP:5.3.0
MySQL:5.1.40
Re: グローバル設定で日本語が消される
Posted: 2011年3月25日(金) 21:37
by kazuike
すみません。以下の設定で解決しました。
--------
php_value mbstring.internal_encoding UTF-8
--------
Re: グローバル設定で日本語が消される
Posted: 2011年3月28日(月) 11:29
by yama
system_settings・site_contentそれぞれのtableのデフォルトエンコード(というか照合順序)の設定はどうなってるか分かりますか?そこが合ってるとしたら(合ってると思う)、プロセッサの処理が両者で微妙に違う可能性がありますね。
管理画面の「ヘルプ」→「support」のタブで、「mbstring」と「MySQLの文字コード情報」がどうなっているか教えていただいてよいでしょうか。こちらで再現できれば修正してみます。
Re: グローバル設定で日本語が消される
Posted: 2011年3月28日(月) 14:31
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」です。
よろしくお願いいたします。
Re: グローバル設定で日本語が消される
Posted: 2011年3月28日(月) 21:01
by yama
kazuike さんが書きました:(.htaccessで「php_value mbstring.internal_encoding UTF-8」設定済み)
設定しない場合は、ここの値はどうなってますか?
Re: グローバル設定で日本語が消される
Posted: 2011年3月28日(月) 21:02
by kazuike
書き方が悪かったですね。
「EUC-JP」です。
Re: グローバル設定で日本語が消される
Posted: 2011年3月28日(月) 21:51
by yama
ありがとうございます。おかげですぐにポイント特定できました(internal_encodingの件は失礼しました)。encoding_translationが有効になってるので、POSTで受け取った値によってサーバ側の判定がブレて、たまたま文字化けが起きるようです。スクリプト側で対応するほうがフレンドリーだと思うので、何か考えてみます。
※29日追記
たまたまではなくPOSTで受け取った時点で明示的に変換されるようです
Re: グローバル設定で日本語が消される
Posted: 2011年3月29日(火) 00:17
by yama
検証をお願いしてよいでしょうか。.htaccessを元のイレギュラーな状態に戻したうえで、
コード: 全て選択
foreach($_POST as $k=>$v)
{
$_POST[$k] = mb_convert_encoding($v,'UTF-8');
}
上記のコードを /manager/includes/protect.inc.php の末尾あたりにでも追記して確認してみていただけますでしょうか。これでうまくいくようであれば、もう少しきっちりと書き直します。
Re: グローバル設定で日本語が消される
Posted: 2011年3月29日(火) 10:08
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">
(こっちのほうがよいと思います)
スニペット・チャンクなど他にもありそうなので、この機会に見直してみます
Re: グローバル設定で日本語が消される
Posted: 2011年3月30日(水) 18:16
by kazuike
yamaさん
ありがとうございます。
私としても、テストしたいのは、やまやまなんですが、
今となっては、ちょっと状況が厳しいです。
もしか、テストできましたら、報告させていただきます。が…