PassWikiをUTF-8で運用する
created 2004-05-27 modified 2011-11-27
PassWikiはデフォルトでEUC-JPになっている。単純にFedora Core1にインストールしたら文字化けしてしまった。(Apacheが、コンテンツがなんであろうとHTTPヘッダで「私はUTF-8です」
Content-Type: text/html; charset=UTF-8と言ってしまうのが問題なのかも。しかしここでは私の好みによりUTF-8に移行する方向で作業します。)
以下、動かすためにやったことや気づいたことのメモ。
修正点
各ファイルの文字コード
EUC-JP から UTF-8 に変更METAタグ
templates/page.html を変更- <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> + <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
ページ名
各ページのデータは、ページ名をURLエンコードし、'%'を除いた16進数文字列を名前とするディレクトリを作成し、そこに格納している。このディレクトリ名をUTF-8由来のコードに変更する必要がある。2011/11/27:メモ UTF-8にすると長さが1.5倍になる。長いページ名だとすごく長くなる。そこで、単に md5() 関数でハッシュ値を作ればいいのでは? md5() の結果は必ず16バイトの16進表現、つまり32バイトになる。ちょっとやってみよう...
ページ名キャッシュ
存在するページ名とそのエンコード文字列が pages.cache に保存されている。こっちも修正する。
RSS
ページ右下にRSSのリンクがあって、更新情報をまとめたXMLを出力することができるようになっている。このXMLの中身は勝手にUTF-8になるようだが、ヘッダがEUC-JP決めうちでエンコード指定しており、中身と合わなくなる。対策:
(1) lib/commands/rss.rdf を変更
- <?xml version="1.0" encoding="EUC-JP" ?> + <?xml version="1.0" encoding="UTF-8" ?>(2) lib/commands/rss.php を変更
- $strBody = substrEUC($strBody, 200); // 200文字に切り詰める + $strBody = mb_substr($strBody, 0, 200, "UTF-8"); // 200文字に切り詰める
2011/11/27 追記:Fedora16の標準状態PHPでは mb_substr が使えなくなった模様。iconv_substrで行けました。
- $strBody = substrEUC($strBody, 200); // 200文字に切り詰める + $strBody = iconv_substr($strBody, 0, 200, "UTF-8"); // 200文字に切り詰める
HTTPボディのヘッダセクション内METAタグ
templates/page.html-<META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> +<META http-equiv="Content-Type" content="text/html; charset=UTF-8">