PR

[phpmyfaq] データベース文字化けを直す(2)

とりあえずプログラムを読んでみる。

通常アクセス(閲覧)は問題ない。もちろん変更や新規追加も問題ない。
動作の上では問題ないが、データベースには文字化けして記載されている。
どのような流れでこれを元に戻しているのか探ってみる。

スポンサードリンク

index.php に以下のようなものがある

$title    = ' - ' . $faq->getRecordTitle($id);

index.phpを読んでもコンバート処理などしている様子はないので、どうやら正しい結果が既に渡されているようだ。
それでは $faq は何か?同ファイルに次のようにある

$faq = new PMF_Faq($current_user, $current_groups);

それでは PMF_Faq はどれか。
/inc/Faq.php がそれのようだ。

    public function getRecordTitle($id)
    {
        if (isset($this->faqRecord['id']) && ($this->faqRecord['id'] == $id)) {
            return $this->faqRecord['title'];
        }
        $query = sprintf(
            "SELECT
                thema
            FROM
                %sfaqdata
            WHERE
                id = %d AND lang = '%s'",
            SQLPREFIX,
            $id,
            $this->language
            );
        $result = $this->db->query($query);
        if ($this->db->num_rows($result) > 0) {
            while ($row = $this->db->fetch_object($result)) {
                $output = $row->thema;
            }
        } else {
            $output = $this->pmf_lang['no_cats'];
        }
        return $output;
    }

ここでも特に変換処理は無いようだ。
/inc/PMF_DB/Mssql.php には次のようにある。

    function query($query)
    {
        $this->sqllog .= pmf_debug($query);
        return @mssql_query($query, $this->conn);
    }

ここでも特に変換処理は無い。

---

ここまでくるとデータベース作成そのものに問題があったのではないかと疑うようになった。
今回はcoreserverを利用している。このサーバは簡単にDBを作成することができる。
MySQLのDBはEUC-JP、Unicode、Shift-JISが選べる(=SQLを発行して作っていない)

サポートされている文字種を調べるには次のSQLを発行すると得ることができる。

SHOW CHARACTER SET

得られた結果は次のとおりだ

Charset Description Default collation Maxlen
big5 Big5 Traditional Chinese big5_chinese_ci 2
dec8 DEC West European dec8_swedish_ci 1
cp850 DOS West European cp850_general_ci 1
hp8 HP West European hp8_english_ci 1
koi8r KOI8-R Relcom Russian koi8r_general_ci 1
latin1 cp1252 West European latin1_swedish_ci 1
latin2 ISO 8859-2 Central European latin2_general_ci 1
swe7 7bit Swedish swe7_swedish_ci 1
ascii US ASCII ascii_general_ci 1
ujis EUC-JP Japanese ujis_japanese_ci 3
sjis Shift-JIS Japanese sjis_japanese_ci 2
hebrew ISO 8859-8 Hebrew hebrew_general_ci 1
tis620 TIS620 Thai tis620_thai_ci 1
euckr EUC-KR Korean euckr_korean_ci 2
koi8u KOI8-U Ukrainian koi8u_general_ci 1
gb2312 GB2312 Simplified Chinese gb2312_chinese_ci 2
greek ISO 8859-7 Greek greek_general_ci 1
cp1250 Windows Central European cp1250_general_ci 1
gbk GBK Simplified Chinese gbk_chinese_ci 2
latin5 ISO 8859-9 Turkish latin5_turkish_ci 1
armscii8 ARMSCII-8 Armenian armscii8_general_ci 1
utf8 UTF-8 Unicode utf8_general_ci 3
ucs2 UCS-2 Unicode ucs2_general_ci 2
cp866 DOS Russian cp866_general_ci 1
keybcs2 DOS Kamenicky Czech-Slovak keybcs2_general_ci 1
macce Mac Central European macce_general_ci 1
macroman Mac West European macroman_general_ci 1
cp852 DOS Central European cp852_general_ci 1
latin7 ISO 8859-13 Baltic latin7_general_ci 1
cp1251 Windows Cyrillic cp1251_general_ci 1
cp1256 Windows Arabic cp1256_general_ci 1
cp1257 Windows Baltic cp1257_general_ci 1
binary Binary pseudo charset binary 1
geostd8 GEOSTD8 Georgian geostd8_general_ci 1
cp932 SJIS for Windows Japanese cp932_japanese_ci 2
eucjpms UJIS for Windows Japanese eucjpms_japanese_ci 3

データベースの現在の設定は次のSQLで得ることができる

SHOW VARIABLES LIKE 'char%';
Variable_name Value
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
character_sets_dir /usr/local/mysql-src-5.1.22/share/mysql/charsets/

照合順序は次の通り

操作 照合順序 サイズ
faq_faqadminlog MyISAM utf8_general_ci
faq_faqcaptcha MyISAM utf8_general_ci
faq_faqcategories MyISAM utf8_general_ci
faq_faqcategoryrelations MyISAM utf8_general_ci
faq_faqcategory_group MyISAM utf8_general_ci
faq_faqcategory_user MyISAM utf8_general_ci
faq_faqchanges MyISAM utf8_general_ci
faq_faqcomments MyISAM utf8_general_ci
faq_faqconfig MyISAM utf8_general_ci
faq_faqdata MyISAM utf8_general_ci
faq_faqdata_group MyISAM utf8_general_ci
faq_faqdata_revisions MyISAM utf8_general_ci
faq_faqdata_tags MyISAM utf8_general_ci
faq_faqdata_user MyISAM utf8_general_ci
faq_faqglossary MyISAM utf8_general_ci
faq_faqgroup MyISAM utf8_general_ci
faq_faqgroup_right MyISAM utf8_general_ci
faq_faqlinkverifyrules MyISAM utf8_general_ci
faq_faqnews MyISAM utf8_general_ci
faq_faqquestions MyISAM utf8_general_ci
faq_faqright MyISAM utf8_general_ci
faq_faqsearches MyISAM utf8_general_ci
faq_faqsessions MyISAM utf8_general_ci
faq_faqstopwords MyISAM utf8_general_ci
faq_faqtags MyISAM utf8_general_ci
faq_faquser MyISAM utf8_general_ci
faq_faquserdata MyISAM utf8_general_ci
faq_faquserlogin MyISAM utf8_general_ci
faq_faquser_group MyISAM utf8_general_ci
faq_faquser_right MyISAM utf8_general_ci
faq_faqvisits MyISAM utf8_general_ci
faq_faqvoting MyISAM utf8_general_ci
32 テーブル MyISAM utf8_general_ci

うーん。。。

コメント