flat7th

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">