We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
  • 文字化け関係、対応についてまとめます。

    manager/index.phpの140行目の「mysql_select_db($dbase);」の直前に下記のコードを挿入。
    $dbase = str_replace('`', '', $dbase); // remove the `` chars

    これにより、DB名を囲むバッククォートを削除します。このバッククォートが文字化けという形で誤動作を起こしているらしく。
    理屈はよく分からないけど、そもそも上記コードはDBAPIからのコピーなので、開発チームは意味分かってると思う。

    以下、テスト結果。

    ●MODx設定
    「サイト名」などで日本語を用いて化けないことを確認

    ●リソース管理及びモジュール
    テンプレート・テンプレート変数・チャンク・スニペット・プラグイン・モジュールのそれぞれにおいて説明欄およびコード本体に日本語を入力して化けないことを確認
    日本語のカテゴリーを作って化けないことを確認
    「カテゴリーなし」が化けないことを確認

    ●METAタグ
    日本語のキーワードを作成できることを確認

    ●ユーザーまわり
    ユーザ管理・ウェブユーザそれぞれにおいて、「フルネーム」や「コメント」などに日本語を入力して化けないことを確認
    日本語の権限名の作成を確認
    日本語のユーザーグループ名の作成を確認

    ●ドキュメント
    DBAPIで解決してるみたいなので今回の件とは関係ないけど、いちおう確認。
    ドキュメントタイトル・本文ともに日本語問題なし。

    以上です
      • 36592
      • 970 Posts
      Quote from: にっく at Nov 14, 2008, 02:01 PM

      http://svn.modxcms.com/jira/browse/MODX-494
      これなんですが、既にPhizeさんが書かれたとおり...

      0963からは、TV名に記号を含むTVも正しく扱えるように修正されたので、その影響っぽいですね…
      入力タイプがdateのTVで、TV名に記号を含んでいる場合には全てカレンダーが表示されませんでした。
      (JavaScriptのメソッド名までエンコードされてしまってるため)
      phiEditedonが問題なのではなくて、Input Typeが「date」のTVの名前にアンダーバーなどを使ったりすると、ドキュメント編集画面でカレンダーを表示しているJavaScriptが動作しなくなっているという全般的な問題ですよね~ phiEditedonを使うときだけ発生する問題ではないので、JIRAの書き込み内容だとちょっとそれが伝わってるかどうか...?

      ちなみに、この件に関連して Rev.4421 で imageTVpreview プラグインの修正が入っていますが、対策はJavaScript側で行われているようですので、上記のdate入力形式のカレンダーJavaScript不動作問題も、このJavaScript側で行うのが正解なんでしょうかね。
        • 36592
        • 970 Posts
        Quote from: yama at Nov 14, 2008, 03:46 PM

        manager/index.phpの140行目の「mysql_select_db($dbase);」の直前に下記のコードを挿入。
        $dbase = str_replace('`', '', $dbase); // remove the `` chars

        この対策だと、ちょっとまずいんじゃないですかね?
        kazuikeさんが書かれていることですが、

        このmysql_select_dbの仕様(バグ?)を知ったとき、
        最初はconfig.inc.phpの「`」を削ったら良いかとも考えましたが、
        データベース名のつけ方によっては、queryを発行する際に「`」が必要なので、
        私の結論としては、mysql_select_dbに渡すデータベース名だけ、「`」を削って渡す。
        ということが汎用的で、バージョンアップとしては妥当な方法かと思います。
        ということなので、上記の方法だと$dbaseの値そのものを書き換えちゃってますんで、mysql_select_dbに渡すデータベース名だけではなく、以降全てに影響が及んでしまいませんか?

        たとえば、
        mysql_select_db( str_replace('`', '', $dbase) );

        とか
        $dbase2 = str_replace('`', '', $dbase); // remove the `` chars
        mysql_select_db($dbase2);
        

        なら、以降も$dbaseの値はそのままでmysql_select_dbの引数だけ値を変更できるような気がするんですが...
          • 27690
          • 98 Posts
          tkfmさん、どうも。にっくです。


          Quote from: tkfm at Nov 14, 2008, 05:17 PM

          Quote from: にっく at Nov 14, 2008, 02:01 PM

          http://svn.modxcms.com/jira/browse/MODX-494
          これなんですが、既にPhizeさんが書かれたとおり...

          0963からは、TV名に記号を含むTVも正しく扱えるように修正されたので、その影響っぽいですね…
          入力タイプがdateのTVで、TV名に記号を含んでいる場合には全てカレンダーが表示されませんでした。
          (JavaScriptのメソッド名までエンコードされてしまってるため)
          phiEditedonが問題なのではなくて、Input Typeが「date」のTVの名前にアンダーバーなどを使ったりすると、ドキュメント編集画面でカレンダーを表示しているJavaScriptが動作しなくなっているという全般的な問題ですよね~ phiEditedonを使うときだけ発生する問題ではないので、JIRAの書き込み内容だとちょっとそれが伝わってるかどうか...?

          ちなみに、この件に関連して Rev.4421 で imageTVpreview プラグインの修正が入っていますが、対策はJavaScript側で行われているようですので、上記のdate入力形式のカレンダーJavaScript不動作問題も、このJavaScript側で行うのが正解なんでしょうかね。

          レスの流れの速さに見失っておりました。
          Jiraにフォロー入れたほうが良いですね。

          書き方としては以下の感じ?

          ・先ほどphiEditedonについて記述したが、我々はこの問題はテンプレート変数に起因していると考えている。

          ・0963からは、テンプレート変数で記号も扱えるようになったようだが、このため、アンダースコア(_)などの記号がエンコードされて、期待した動きをしなくなっているようだ。

          ・我々の解釈が正しいとして、これはスニペット側で対処を行うべき問題か?それとも、我々の検討以外に、原因となる箇所があるのだろうか。スニペットの記述について、指針を教えてほしい

          こういう書き方でどうでしょうか。過不足ありましたらお知らせください。JIRAにAdditional commentとして記述しておきますー。
          • Quote from: tkfm at Nov 14, 2008, 05:24 PM

            ということなので、上記の方法だと$dbaseの値そのものを書き換えちゃってますんで、mysql_select_dbに渡すデータベース名だけではなく、以降全てに影響が及んでしまいませんか?
            なるほどたしかに。
            mysql_select_db( str_replace('`', '', $dbase) );

            それでは、これでいきましょう。というわけで、この件は開発チームに報告できそうです。テストも済ませました。

              • 27690
              • 98 Posts
              Quote from: yama at Nov 15, 2008, 12:53 AM

              Quote from: tkfm at Nov 14, 2008, 05:24 PM

              ということなので、上記の方法だと$dbaseの値そのものを書き換えちゃってますんで、mysql_select_dbに渡すデータベース名だけではなく、以降全てに影響が及んでしまいませんか?
              なるほどたしかに。
              mysql_select_db( str_replace('`', '', $dbase) );

              それでは、これでいきましょう。というわけで、この件は開発チームに報告できそうです。テストも済ませました。



              上記の件とあわせて、僕のほうでレターを書きましょうか?
              この対策はJIRAか、ライアンやジェイソンへPMか、指示くれればやっておきます。
              • Quote from: にっく at Nov 15, 2008, 01:11 AM

                上記の件とあわせて、僕のほうでレターを書きましょうか?
                この対策はJIRAか、ライアンやジェイソンへPMか、指示くれればやっておきます。
                助かります、もしよければよろしくお願いします。

                http://svn.modxcms.com/jira/browse/MODX-489
                JIRAのほうには、書き換え済みのファイルを添付し直しておきました。manager/index.phpです。

                実際はこの添付ファイルが必要なほどの変更ではなく、manager/index.php内の140行目、
                mysql_select_db($dbase);


                mysql_select_db( str_replace('`', '', $dbase) );

                に書き換えただけです。

                理屈は僕はよく理解できてませんが、mysql_select_db 関数にDB名を渡す時にバッククォート( ` )を
                削除しないと、環境によっては誤動作を起こして文字化けします。
                includes/extenders/dbapi.mysql.class.inc.php ではすでに同様の処理が盛り込まれてるので、
                たぶん開発チームはこの処理については心当たりがあるんじゃないかと思います。なので、あまり
                細かく説明しなくても、すぐに意図を理解してもらえるかも。

                要は、manager/index.phpにも同じ処理が必要ですよね?ということですね。

                以上、上記JIRAへのコメントかPMなどの形で開発チームにお伝えいただけると助かります。
                (JIRAがいいかな?)
                  • 27690
                  • 98 Posts
                  Quote from: yama at Nov 15, 2008, 01:25 AM

                  Quote from: にっく at Nov 15, 2008, 01:11 AM

                  上記の件とあわせて、僕のほうでレターを書きましょうか?
                  この対策はJIRAか、ライアンやジェイソンへPMか、指示くれればやっておきます。
                  助かります、もしよければよろしくお願いします。


                  とりあえずJIRAにコメントしました。あと、Yamaさんがあげたパッチを加えておきました。

                    • 29908
                    • 95 Posts
                    thrです。

                    ライアンからこんなPMがきていました。

                    Can you please pass this around to some people having the charset/collation issues and see if the test build attached here resolves it. Thanks!

                    http://modxcms.com/forums/index.php/topic,31480.msg191260.html#msg191260

                    でトピックから0963-test.tgzをダウンロードしてテストしてみました。
                    前にyamaさんがテストしていた項目

                    ●MODx設定
                    「サイト名」などで日本語を用いて化けないことを確認

                    ●リソース管理及びモジュール
                    テンプレート・テンプレート変数・チャンク・スニペット・プラグイン・モジュールのそれぞれにおいて説明欄およびコード本体に日本語を入力して化けないことを確認
                    日本語のカテゴリーを作って化けないことを確認
                    「カテゴリーなし」が化けないことを確認

                    ●METAタグ
                    日本語のキーワードを作成できることを確認

                    ●ユーザーまわり
                    ユーザ管理・ウェブユーザそれぞれにおいて、「フルネーム」や「コメント」などに日本語を入力して化けないことを確認
                    日本語の権限名の作成を確認
                    日本語のユーザーグループ名の作成を確認

                    をテストしてみました。
                    スニペット、プラグイン、モジュール本体に日本語を入れてテストはしていませんが、
                    それ以外は日本語の化けはありませんでした。

                    みなさんはどうでしょうか。
                    あと、他にテストすべきところありますか?
                      MODx CMS JAPAN
                      モデレータ(日本公式とか、広報とか、雑務担当?)
                      thr
                    • あとはファイルマネージャでのテキストファイルの日本語読み書きですが。これは今回は対応が見送られる可能性があります。
                      今日はSVNのファイルからRCの記述から外されたので、いよいよ次は正式公開です。たぶんクリスマスリリースかな?