We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19033
    • 892 Posts
    こんにちは。

    うちの場合ですが、
    ・XERA+ php 5.2.3
    ・さくら php 4.4.7

    で、
    mbstring.language Japanese
    です(mbstring.script_encoding っていうのはないみたいです...)。

    さくらの場合はphp.iniで以下のように
    default_charset = UTF-8
    mbstring.language = Japanese
    mbstring.internal_encoding = UTF-8
    mbstring.encoding_translation = OFF
    mbstring.http_input = auto
    mbstring.http_output = pass

    XREA+ は.htaccess で以下のようにです。
    php_value default_charset UTF-8 
    php_value mbstring.language Japanese 
    php_value mbstring.internal_encoding UTF-8 
    php_flag mbstring.encoding_translation OFF 
    php_value mbstring.http_input auto 
    php_value mbstring.http_output pass 


    私も詳しいことはアヤシイのですが、.htaccessならば、各ディレクトリごとに
    設定できるんじゃないでしょうか(でもサーバーごとに違うかも知れないので、
    サポートに確認してみた方が良いかも)。

    詳しい方フォーローお願いします~!

    あと、ちょっと思ったのですが、もしかして、新規にインストールし直したら
    うまくいくんじゃないかとか。。(根拠はないんですけど...)。
      • 27086
      • 37 Posts
      こんにちは。

      私もあるサーバでだけチャンク内の一部の文字(SJISでの機種依存文字や"~"など)が?になっちゃう現象に悩んでいました。

      私が管理しているサーバじゃないのでerror_logを追記して入出力を追っかけたりできないので、原因究明までは至っていません。環境はRHEL3なのでphp 4.3.2 + mysql 4.1.x です。my.cnfには例の skip-character-set-client-handshake が入っています。

      開発用サーバで準備して、上記の本番サーバにコンテンツを移動しました。開発用サーバ上では問題はなく、本番サーバ上でもチャンク(テンプレートも何ですか。。。)保存時だけ文字化けです。

      ソースを見る限り、チャンク保存時だけ何かしているようには見えません。mysql上のデータは流し込んだ段階では、文字化けしてしまう文字も大丈夫なようです。mysql側が特定の文字を保持できないって訳じゃないと思われます。

      新規作成だと大丈夫という情報を元にインストーラのソースを見てみたのですが、DB作成時に参照順序も指定していていました。同じようにDBを作成してからDBへデータ流し込みしてみたのですが問題解決にはなりませんでした。

      今のところ調べてみたのは上記までです。稼働しているコンテンツの問題なので、できれば簡単な修正で解決できれば良いんですけど。問題が出ているのはphp4.3.2シリーズを使っているこのサーバだけなので、何となくphpかphp-mysqlの問題かなーと思っています。natalieさんのサーバのphpのバージョンは分かりますか?
        • 28073
        • 164 Posts
        参考になるかわかりませんが、僕が以前経験した文字化けの話を。
        MODxを別のサーバに引越しするためにDBのデータを移した際、shobuさんと同じように"~"が文字化けするようになりました。

        うちの場合はDBのデータがUTF-8のようで実はEUC-JPだったのが原因でした。
        DBを移す際、バックアップ(mysqldump)をとられると思うのですが、それをテキストエディタで開くとテーブルの定義がこんな感じになってました。

        …バックアップデータから一部抜粋…
        DROP TABLE IF EXISTS `modx_active_users`;
        CREATE TABLE `modx_active_users` (
          `internalKey` int(9) NOT NULL default '0',
          `username` varchar(50) character set ujis NOT NULL default '',
          `lasthit` int(20) NOT NULL default '0',
          `id` int(10) default NULL,
          `action` varchar(10) character set ujis NOT NULL default '',
          `ip` varchar(20) character set ujis NOT NULL default '',
          PRIMARY KEY  (`internalKey`)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Contains data about active users.';
        


        この中の「character set ujis」が曲者で「UTF-8で作ったDBだけど、このカラムだけEUC-JP」という変な状態に huh
        そのためDBのバックアップから「character set ujis」の部分を片っ端から消して再度DBをリストアしたら無事に文字化けもなく動くようになりました。

        あと別解としてはmysqldumpに"-t"オプションをつけてデータのみを抽出して新しく作ったMODxのDBにリストアする方法でも大丈夫だと思います(未確認)。

        文字化けの現象が似ているので何かヒントになるかと思い、投稿してみました smiley
        ちなみに文字化けしたのはMODxで動かしている自分のサイトです grin
          • 20978
          • 22 Posts
          皆様、

          お休みのところ丁寧なお返事、ありがとうございました。

          >MEGUさん


          php_value mbstring.language "Japanese"
          php_value mbstring.script_encoding "UTF-8"

          というふうにMODxのフォルダー内の.htaccessに書き込んでみたのですが、状況は、変わりませんでした。

          phpの設定に関しては、今後のこともあるのでサーバー側に問い合わせてみたいと思います。

          >shobu さん

          私もテンプレートやチャンクを保存している時に何か起こっているのでは。。。と思いました。私は、config.ini.phpでUTF-8を指定して、ドキュメント内のDBでの文字化けを直したのですが、テンプレートやチャンクで日本語を保存する時、あたかもその設定が、元に戻ってしまって保存されているという感じです。実際、ドキュメントの方を再びconfig.ini.phpで文字コード指定なしに戻すとドキュメントの日本語は、????に文字化けしてしまいます。

          MySQL 5.0.27 + PHP 5.2.1を使っています。それぞれ、MySQL 4.1.22、PHP 4.4.6という選択も可能ですが、shobu さんの方で文字化けが起きてないMySQL+PHPプログラムのバージョンペアは、どんな感じですか。

          >soushiさん

          私の方のテーブル定義は、こんな感じです。


          DROP TABLE IF EXISTS `modx_active_users`;
          CREATE TABLE `modx_active_users` (
          `internalKey` int(9) NOT NULL default ’0’,
          `username` varchar(50) NOT NULL default ’’,
          `lasthit` int(20) NOT NULL default ’0’,
          `id` int(10) default NULL,
          `action` varchar(10) NOT NULL default ’’,
          `ip` varchar(20) NOT NULL default ’’,
          PRIMARY KEY (`internalKey`)
          ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=’Contains data about active users.’;

          他の部分ももしかしたらと思い、character set を検索してみたのですが、見つかりませんでした。。。

          soushiさんの書き込みで
          あと別解としてはmysqldumpに"-t"オプションをつけてデータのみを抽出して新しく作ったMODxのDBにリストアする方法でも大丈夫だと思います(未確認)。
          とあります。こちらを試してみようと思うのですが、「"-t"オプションをつけて」というのがちょっとわからないのです。これは、エクスポートする時に設定できることなのですか?お手数ですが、オプションのつけ方についてもう少し教えてください。よろしくお願いします。



            • 27086
            • 37 Posts
            こんにちは。

            natalieさん、こちらで問題ないことを確認したのはRHEL4、CENTOS4のPHP4.3.9+mysql 4.1.2xです。比較的新しいバージョンでも起きているようなのでphpそのものは無罪なのかなぁ。。。

            DBからのダンプはmysqldumpを使う場合、MODxの管理画面を使う場合、両方試してみましたが、soushiさんのような現象はありませんでした。natalieさん、ダンプ内容の確認場所は念のため modx_htmlsnippetテーブルを見てみてください。

            それでは。
              • 20978
              • 22 Posts
              皆様

              メリークリスマス grin

              htmlsnippetsテーブルは、こんな感じです。

              DROP TABLE IF EXISTS `modx_site_htmlsnippets`;
              CREATE TABLE `modx_site_htmlsnippets` (
              `id` int(10) NOT NULL auto_increment,
              `name` varchar(50) NOT NULL default ’’,
              `description` varchar(255) NOT NULL default ’Chunk’,
              `editor_type` int(11) NOT NULL default ’0’ COMMENT ’0-plain text,1-rich text,2-code editor’,
              `category` int(11) NOT NULL default ’0’ COMMENT ’category id’,
              `cache_type` tinyint(1) NOT NULL default ’0’ COMMENT ’Cache option’,
              `snippet` mediumtext,
              `locked` tinyint(4) NOT NULL default ’0’,
              PRIMARY KEY (`id`)
              ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=’Contains the site chunks.’ AUTO_INCREMENT=35 ;

              特に問題ないかと思います。

              shobuさんは、


              natalieさん、こちらで問題ないことを確認したのはRHEL4、CENTOS4のPHP4.3.9+mysql 4.1.2xです。

              というお話なので、MySQL 5.0.27からMySQL 4.1.22に変更してみようかなということで、サイト全体のバックアップを取って、またそれをリストア、そしてうまくリストアできない、しかも文字化けは、直ってないという最悪の状況をさけるために、同じレンタルサーバーさんから新たにスペースを借りまして実験的に、MySQL 4.1.22+PHP 5.2.1で新しくMODxをインストールしなおしたところ、リソース管理内の日本語(うちの場合は、テンプレート、チャンク内です)の文字化けは、なくなりました!!!

              ↑config.inc.phpでキャラクターコード設定のところをutf-8にしていました。。。。早とちりです。MySQL 4.1.22+PHP 5.2.1で新しくインストールしなおしても状況は、変わりませんでした。

              PHPの方もバージョン下げてみようかな。。。と思います。でも、MySQL5+PHP5でも問題なく使っている方いられるわけですよね。。。

                • 28073
                • 164 Posts
                こんにちわ。
                なかなか手ごわい文字化けですね。



                あと別解としてはmysqldumpに"-t"オプションをつけてデータのみを抽出して新しく作ったMODxのDBにリストアする方法でも大丈夫だと思います(未確認)。
                とあります。こちらを試してみようと思うのですが、「"-t"オプションをつけて」というのがちょっとわからないのです。これは、エクスポートする時に設定できることなのですか?お手数ですが、オプションのつけ方についてもう少し教えてください。よろしくお願いします。

                これはmysqldumpというコマンドがあって、こちらが使える場合のオプションになります。
                レンタルサーバの場合、使用するのは難しいかもしれません。

                一応参考までにうちの環境を。。。

                [バージョン]
                php   5.2.4
                mysql 5.0.41(昔は5.0.33)
                
                [php.ini]
                mbstring.detect_order         auto
                mbstring.encoding_translation On
                mbstring.func_overload        0
                mbstring.http_input           auto
                mbstring.http_output          pass
                mbstring.internal_encoding    UTF-8
                mbstring.language             Japanese
                mbstring.strict_detection     Off
                mbstring.substitute_character no value
                
                [mysql]
                character_set_client      utf8
                character_set_connection  utf8
                character_set_database    utf8
                character_set_filesystem  binary
                character_set_results     utf8
                character_set_server      utf8
                character_set_system      utf8
                


                昔はEUC-JPでの運用だったんですが、サーバを移す際に一気にutf-8に変えてしまいました。
                (それで前回投稿したような文字化けが発生したのですが)

                あとphpmyadminは使ったことないので詳しい機能はわからないのですが、もしSQL文を直接入力できるようでしたら以下のSQLでmysql内の文字コード設定を見ることができます smiley

                SHOW VARIABLES LIKE 'char%';
                

                  • 20978
                  • 22 Posts
                  >soushiさん

                  こんにちは!

                  mysqldumpが使えるかどうか調べてみます。

                  環境の設定のこと教えていただけるととても参考になります。

                  今回、MEGUさんが書いてくださった「さくらサーバー」や「XREAサーバー」のphp.iniの設定を見ながら私のphp.iniを設定しなおして、今は、こんな感じです。mysqlの方のキャラクターセット調べてみました。ほとんどsoushiさんのphp.iniの設定と同じなんですが。


                  [バージョン]
                  php 5.2.1
                  mysql 5.0.27

                  [php.ini]
                  mbstring.detect_order auto
                  mbstring.encoding_translation On
                  mbstring.func_overload 0
                  mbstring.http_input auto
                  mbstring.http_output pass
                  mbstring.internal_encoding UTF-8
                  mbstring.language Japanese
                  mbstring.script_encoding  UTF-8
                  mbstring.strict_detection Off
                  mbstring.substitute_character no value

                  [mysql]
                  character_set_client  tf8
                  character_set_connection  utf8
                  character_set_database  latin1
                  character_set_filesystem  binary
                  character_set_results  utf8
                  character_set_server  latin1
                  character_set_system  utf8

                  mbstring.script_encodingの方は、マニュアルには、詳しく書いてないようなんですけど、php.iniでコメントアウト(入れない)しても今回の文字化けには、変化がありませんでした。

                  mysqlのキャラクター設定の方で気になるのが、

                  character_set_database  latin1
                  character_set_server  latin1

                  なのですが、データベースを作る時にutf8で作っているので、問題ないというサポートのお話です。。。。ここは、もう少し自分でMySQLのドキュメンテーションを読んでみようと思います。試行錯誤でしかできない私としては、取り合えず、みんな、utf8にしてみてください!というところなんですが smiley

                  あれから私が使っているサーバーでのオプションである

                  MySQL 4.1.22、PHP 4.4.6

                  を使って、それぞれの組み合わせでインストールしなおして試してみたのですが、どのペアでも文字化けの様子は、変わりませんでした。 :’(

                    • 19033
                    • 892 Posts
                    こんにちは。
                    なんとか解決すると良いですね。。

                    ちなみに、うちの場合XREA+はそうしさんのところと同じでした。
                    character_set_client utf8
                    character_set_connection utf8
                    character_set_database utf8
                    character_set_filesystem binary
                    character_set_results utf8
                    character_set_server utf8
                    character_set_system utf8

                    さくらの方は、MYSQLが4.0系なので?こんな感じでした。
                    character_set ujis
                    character_sets ujis big5 cp1251 cp1257 croat czech danish dec8 do...

                    mysqldump は、telnet 接続ができれば使えるそうです(さくらはできるっぽいです)。
                    使い方はそうしさんが教えてくださると。。^^。。
                      • 28073
                      • 164 Posts
                      返信が遅れてしまいましたが :’(

                      natalieさんのMySQLはDBの文字コードがlatin1になってるんですか。。。
                      latin1で検索すると文字化けに絡んだページもたくさんヒットしますねぇ。

                      MODx用のデータベースを作る際ってどの用に作られてますか?
                      もしSQL文を使って直接データベースを作成できるならば、以下のように作ってみてはどうでしょうか?

                      create database [データベース名] character set utf8;
                      


                      後ろにutf8の文字コード設定を入れてます。
                      あとskip-character-set-client-handshakeという設定をmysqlに行ってみるのも手ですが、mysqlの設定ファイルであるmy.cnfがいじれないとダメみたいです。

                      Quote from: MEGU at Dec 26, 2007, 08:50 AM

                      mysqldump は、telenet 接続ができれば使えるそうです。
                      使い方はそうしさんが教えてくださると。。^^。。

                      簡単な使い方でしたら(^^;
                      ただ、telnetやssh接続ができるレンタルサーバ屋さんは滅多にないですよね。。。