We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 10105
    • 51 Posts
    お世話になっています。

    AjaxSearch 1.8.1を使用してるのですが、今まで問題なく使用できていたものを
    サーバー移行に伴い、同じように複製して作成したのですが、検索結果に文字化けが発生してしまいます。

    ほとんどの箇所は問題なく表示されているのですが、文頭と文末辺りに、”��...”のような感じになり、
    ハイライトも場所によってハイライトされない状態です。

    また、ソースを確認しようとすると「指定したエンコードで変換できない文字が含まれています~」と警告が出ます。

    過去ログを見て
    config.inc.php の $database_connection_charset = ’utf8’; は修正してみました。
    .htaccess、php.ini に関してはやってはみたもののエラーが出てしまいます。

    なにか間違っているのでしょうか・・・


      • 6350
      • 421 Posts
      これだけの情報でコメントするのは難しいと思います。

      phpMyAdmin では文字化けはまったくないのでしょうか?
      MySQL と modx との関係であれば kazuikeさん作の [モジュール]check_charset で調べることができます。
      http://modxcms.com/forums/index.php/topic,28567.0.html

      今お使いのテンプレートが関係しているとすれば・・・もう少し詳しく移行手順の説明と以降先のサーバの説明がないと答えることは難しいだろうと思います。

      ので、サンプルサイトもインストールしてみて、なにも手を加えていない状態で文字化けするのかどうかの確認も願います。
        • 10105
        • 51 Posts
        dainitiさん、ありがとうございます。

        kazuikeさん作の [モジュール]check_charset を実行した結果は

        system_settings
        $modx_charset UTF-8

        config.inc.php
        $dbase `mydb`
        $database_connection_charset utf8
        $database_connection_method SET CHARACTER SET

        MySQL VARIABLES LIKE character_set...

        Manager default DBAPI connected
        character_set_client utf8 utf8
        character_set_connection utf8 utf8
        character_set_database utf8 utf8
        character_set_filesystem binary binary
        character_set_results utf8 utf8
        character_set_server utf8 utf8
        character_set_system utf8 utf8
        character_sets_dir /usr/share/mysql/charsets/ /usr/share/mysql/charsets/

        のようになりました。

        移行に関しては、サーバーをXREAからαmailプレミアに変更した際に、
        一からインストールして、XREA側を真似ながら作り直した感じです。

        サンプルサイトはこれから試してみます。
          • 10105
          • 51 Posts
          改めて、AjaxSearch1.8.2をインストールして
          簡素なテンプレートを使って試してみました。

          検索窓→[!AjaxSearch? &ajaxSearch=`0` &AS_showResults =`0` &AS_landing=`***`!]
          検索結果→[!AjaxSearch? &ajaxSearch=`0` &AS_showForm=`1`!]

          結果は、変わらず文頭と文末部が...□のように文字化けしています。
          検索結果が無い状態では文字化けは起こりません。(当たり前ですが)
          ソースも問題なく開けます。

          phpMyAdmin では文字化けは無いようです。

          αmailプレミアサーバー php 5.1.6
            • 6350
            • 421 Posts
            確認してほしい箇所

            (1)AjaxSearch 186行目
            $cfg[’extractEllips’] = isset($extractEllips) ? $extractEllips : (isset($__extractEllips) ? $__extractEllips : ’...’);
            ...の前後に文字化けはありませんか?

            (2)サーバーにWAF(webアプリケーションファイヤーウォール)は設定されていませんか?
            さくらレンタルサーバーで実験してみました。WAFに使われているのはSiteGuardです。
            さくらでWAFを使う場合の注意事項です。
            http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000734

            注意事項のなかで特に気になるのが「CGI、PHPプログラムのインストール時に影響が出る恐れがあるため、その場合はインストール前にWAFを無効にしてください」という部分です。ここで気が付いたのが Joesレンタルルサーバーの不具合です。 Joes ではWAFが2月以降強制的にインストールされてしまい、さくらのようにユーザが選択できません。Joes でWAFが導入された後にインストールしたmodx はページアクセスのたびに coreファイルを吐いていました。最近になってようやく coreファイルははかなくなり sslSwitcher もどうにか動くようになりました。

            念のため AjaxSearch の動作も確認してみたところまったく動作しません。とくに AjaxSearch はWAFの影響をもろに受けてしまうようです。

            さくらでも WAF を有効にした状態で AjaxSearch を確認してみたところ Forbiddenエラーでこれもまた動作してくれません。Managerへのログインさえできなくなります。

            アルファメールプレミアも仕様がわかりにくいようなのでこのような WAF が導入されている可能性はかなり大きいです。一度サーバ屋さんに問い合わせてみることをお勧めします。WAFはSQLインジェクションなどの対応のため今後はどこのレンタルサーバでも取り入れされそうな気がします。

            あと、考えられるのは MySQL5、PHP などを含めた Apatch のコンパイルオプションなども影響するのかもしれません。その例が 「chunkに全角文字の使用でエラー(さくらで本日より)」のような状態です。アルファメールのみで検索結果の前後が化けてしまうのであればこれも疑う余地は有りそうです。

            とくに modx の場合正式にサポートされたレンタルサーバはほとんどないためサーバ屋さんがサポートしてくれるかどうかというのが一番の問題のような気がします。

            それでは、この辺で ・・・
              • 28073
              • 164 Posts
              こんばんわ smiley

              ソース等確認したわけではないのですが、以下の設定が可能でしたら一度確認してもらえますでしょうか。
              modxをインストールしたトップディレクトリに.htaccessファイルを作成し以下の行を追加します。

              php_value mbstring.func_overload "6"
              

              ※既に.htaccessがあったらそのファイルの一番下にでも追記してもらえればと思います。

              この設定は…簡単に言うとマルチバイト(日本語)を考慮せず書いたphpをマルチバイト対応に強制的に変更する設定です。
              サーバによってはこの設定が自動的に入っていたり、入ってなかったりマチマチのようです。
              また環境によってはこの設定自体が.htaccessで行えない場合があるので、設定後にエラーが表示されるようでしたらこの設定を外してください。

              海外製のプログラムに関してはマルチバイトを意識した造りこみなんて余りやってくれないので、問題が発生するようなときはfunc_overloadの設定で調整することがたまにあります。
              ちなみにfunc_overloadの詳細は以下のようなサイトに書かれています。
              (phpのドキュメントです)

              http://php.benscom.com/manual/ja/mbstring.overload.php

              > dainitiさんへ
              最近のレンタルサーバってWAFが搭載されてるんですね。
              不正アクセスが慢性的になっているこのご時世では仕方のない流れかもしれませんが、利用したいプログラムがWAFのせいで動かないのはやるせないですね。
              WAFは一体何を防いでいるのだと(笑)
                • 10105
                • 51 Posts
                dainiti さん、soushi さん ありがとうございます。

                まずsoushi さんのアドバイスの
                php_value mbstring.func_overload "6"
                

                を試してみたところ、500 Internal Server Error が出てしまいました。

                いろいろと試していた段階でも .htaccessでmbstring の設定をすると、500 Internal Server Error が出ていたので
                調べてみたところ、アルファメールプレミアサーバー側で、.htaccessからphp_valueやphp_flagの設定ができない仕様になっているようでした。

                で、php.ini も使えないので、とあるサイトで見つけた似たような情報を元に、直接 AjaxSearch 291行目辺りの

                if ($cfg['ajaxSearch']){  // ajax mode
                    // $ajaxSearchType [1 | 0] (as passed in snippet variable ONLY)
                    // Use this to display the search results using ajax
                    // Set this to 1 if you would like to use the live search (i.e. results as you type)
                    $cfg['ajaxSearchType'] = isset($ajaxSearchType) ? $ajaxSearchType : (isset($__ajaxSearchType) ? $__ajaxSearchType : 0);
                
                の上辺りに

                ini_set('mbstring.internal_encoding', 'UTF-8');
                ini_set('mbstring.http_input', 'AUTO');
                ini_set('mbstring.http_output', 'UTF-8');
                ini_set('mbstring.detect_order', 'auto');
                ini_set('mbstring.substitute_character', 'none');
                
                を追加してみたところ文字化けが解消されました。

                ただ見よう見まねなもので不安なのですが、これで問題等は無いでしょうか?

                > dainitiさん
                WAFの情報ありがとうございます。
                ありがたい機能なのかもしれませんが、MODxユーザーにとっては厄介ですね
                早くMODxもサポートされてほしいです