現象
Mediawiki を SQL ダンプしてから、文字コードを修正してアップグレードをかけたところ
- ページタイトルと表示タイトルだけが文字化けする
- 文字化けしたページに、正しい名前のリンクから飛び込むことはできる
という現象が発生した。
やったこと
grep と vi でプログラムを追いかけた。あちこちたどったあとで includes/page/Article.php
の中の adjustDisplayTitle( )
あたりを読むと、ページタイトル・表示タイトルだけ、キャッシュから拾っていることが判明した。
分析
このような手順で文字化けが発生したのだと推定した。
- 古い文字コードのタイトルが、キャッシュテーブルに書き込まれる。
- SQL ダンプする。
- ダンプリストの中の、
page
の文字コードを修正する。タイトルの文字コードもここで修正される。(このとき、キャッシュテーブルの中身はそのまま) - 書き戻す。
- キャッシュを使って表示しようとするデータは、古い文字コードのままなので、文字化けする。
対策
ダンプリストの中のキャッシュデータの文字コードも変更できればよいが、バイナリデータ扱いのようなので、あまりうまく行かない。手作業になるが、文字化けしたページを開いては、その都度、URL に ?action=purge
コマンドを加えて強制的にキャッシュをクリアするとよい。