PR

Contact Form DB 2.7.5 文字化けではまった

wordpress
記事内に広告が含まれている事があります。

今回のエントリーはプログラム関係になるので、チンプンカンプンの方もいらっしゃると思います。了承ください。

medium_394359583
photo credit: ores2k via photopin cc

Contact Form DB 2.7.5 ではまりました

WordPrssをインストールし、気軽に「Contact Form7」や「Contact Form DB」をインストール。

フォームのチェックを行うと「Contact Form DB」の画面に情報が出てこない。おぉ?

DBを直接見てみるとデータは 、入っている。

WordPress のデバッグを true にしてみると、ワーニング。

PHP 5.5.0 で非推奨の拡張モジュール

MySql と会話する拡張モジュールが php 5.5.0 から非推奨になっている物が多い。エラーを回避する設定を行う。

wp-includes/load.php の 254行目あたりのエラーレベルを書き換える。

//error_reporting( E_ALL );
error_reporting( E_ALL  ^ E_DEPRECATED);

これで警告がでなくなる。

ある時期に使えなくなる関数がかなりあるが、こればかりは仕方ない。しばらく目をつむろう。

Contact Form DB の日本語が文字化けで「?」に

情報が出てくるようにはなったが、今度は文字化け。

簡単に解決するだろうと思ったら思ったよりハマった。

色々と見ていてたどり着いたのが、「Contact Form DB」のプラグインフォルダ内にある CFDBQueryResultIterator.php。

ここで MySql に対する文字コードをセットしているのだが、条件分岐の指定がうまくないようで、実際には文字コードがセットされていないようである。

読み込んで行くのもなんだったので、文字コードのセットを条件分岐の外に出し、確実に読ませるようにした。

// Target charset is in wp-config.php DB_CHARSET
if (defined('DB_CHARSET')) {
    if (DB_CHARSET != '') {
        global $wpdb;
        if (method_exists($wpdb, 'set_charset')) {
            $collate = null;
            if (defined('DB_COLLATE')) {
                if (DB_COLLATE != '') {
                    $collate = DB_COLLATE;
                }
            }
            $wpdb->set_charset($con, DB_CHARSET, $collate);
        }
        else {
            $setCharset = 'SET NAMES \'' . DB_CHARSET . '\'';
            if (defined('DB_COLLATE')) {
                if (DB_COLLATE != '') {
                    $setCharset = $setCharset . ' COLLATE \'' . DB_COLLATE . '\'';
                }
            }
            mysql_query($setCharset, $con);
        }
    }
}
$setCharset = 'SET NAMES \'' . DB_CHARSET . '\'';
mysql_query($setCharset, $con);

$setCharset = ‘SET NAMES \” . DB_CHARSET . ‘\”;
mysql_query($setCharset, $con);

上記2行を外に配置した。

これで文字化け解消。

ふぅ〜っつ。

まとめ

WordPress、プラグインは、便利に使わせてもらっている分、トラブルがあると厄介ですね。

さて、ピッチあげて仕事しなければ・・・

コメント

タイトルとURLをコピーしました