現象

Mediawiki を SQL ダンプしてから、文字コードを修正してアップグレードをかけたところ

  • ページタイトルと表示タイトルだけが文字化けする
  • 文字化けしたページに、正しい名前のリンクから飛び込むことはできる

という現象が発生した。

やったこと

grep と vi でプログラムを追いかけた。あちこちたどったあとで includes/page/Article.php の中の adjustDisplayTitle( ) あたりを読むと、ページタイトル・表示タイトルだけ、キャッシュから拾っていることが判明した。

分析

このような手順で文字化けが発生したのだと推定した。

  1. 古い文字コードのタイトルが、キャッシュテーブルに書き込まれる。
  2. SQL ダンプする。
  3. ダンプリストの中の、page の文字コードを修正する。タイトルの文字コードもここで修正される。(このとき、キャッシュテーブルの中身はそのまま)
  4. 書き戻す。
  5. キャッシュを使って表示しようとするデータは、古い文字コードのままなので、文字化けする。

対策

ダンプリストの中のキャッシュデータの文字コードも変更できればよいが、バイナリデータ扱いのようなので、あまりうまく行かない。手作業になるが、文字化けしたページを開いては、その都度、URL に ?action=purge コマンドを加えて強制的にキャッシュをクリアするとよい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です