2015/01/25(日)PukiWiki UTF8版とEUC-JP版
PukiWiki UTF-8版とEUC-JP版
今の ECO-Wiki (acronia) はEUC-JP版
PukiWikiにはUTF-8版とEUC-JP版がありますが、現在はEUC-JP版を採用しています。理由としては、
- 元のECO-WikiがEUC-JPだった
- UTF-8版にすると転送量が増える
- UTF-8版にするとPukiWikiが内部的に使用するファイル名が長くなる
- UTF-8版にするとURLが長くなる(けど、そんなに大した問題ではないかな)
- UTF-8はあまりおすすめしないような記述があった*1
などです。
UTF-8版にするべきか
ただ、最近はUTF-8版にした方が良いかなと考え始めてます。
- 最近の文字コード事情はUTF-8が主流
- PukiWiki公式でもUTF-8推奨になった(PukiWiki開発日記、PukiWiki 1.5.0ダウンロード)
- 転送量は圧縮が効いていればそんなに問題ないかも
とはいえ、EUC-JPで困っているというわけでもないのでUTF-8版に置き換えるかどうかはちょっと悩ましいところです。
UTF-8版にするなら、PukiWiki 1.5.1のリリースに合わせることになるでしょうか。
UTF-8版にする場合の課題
- ファイルなどを全部UTF-8に変換する必要がある
- 変換スクリプトが作られているようなので、これで変換を試みることになりそうです。
- (英数字以外をページ名に含む)各ページのURLが変わってしまう
- 検索エンジンなどからのリンクが切れてしまうので、存在しないページにアクセスされたら、EUC-JP版URLへのアクセスと解釈して301 Moved Permanentlyで新URLに転送するような仕組みを入れたいところです。
- と思って探してみたら、同じ事をやってた人がいました→PukiwikiをEUC→UTF-8移行した後もEUCのURLでアクセスできるようにする - あっきぃ日誌
- 検索エンジンなどからのリンクが切れてしまうので、存在しないページにアクセスされたら、EUC-JP版URLへのアクセスと解釈して301 Moved Permanentlyで新URLに転送するような仕組みを入れたいところです。
2015/01/24(土)PukiWiki bodycache patch副作用:id重複
PukiWiki bodycache patch副作用:id重複
たまたま気が付いたのですが、ECO-Wikiのメニューバーと本文それぞれの見出しのidが重複していました。
例えば、ECO-Wiki (acronia) トップページでは、メニューバーの「ECO攻略Wiki」と本文の「ECO-Wiki (acronia):エミル・クロニクル・オンライン攻略情報wiki」に同じid="content_1_0"が振られています。
原因を追ってみたところ、どうやらbodycacheパッチの副作用のようです。
- 発生条件
- PukiWiki bodycacheパッチを適用している。
- MenuBarと本文の両方で見出しを使用している。
- 原因
- bodyキャッシュを読み込んだときは、本文に対するconvert_htmlの実行はスキップされる。その結果、convert_html内の$contents_idがインクリメントされなくなるため、メニューバー生成時のconvert_htmlの実行結果に影響を与えてしまう。
function convert_html($lines) { //省略 static $contents_id = 0; //省略 $body = & new Body(++$contents_id); //この$contents_idのインクリメントが必要 //省略 }
- bodyキャッシュを読み込んだときは、本文に対するconvert_htmlの実行はスキップされる。その結果、convert_html内の$contents_idがインクリメントされなくなるため、メニューバー生成時のconvert_htmlの実行結果に影響を与えてしまう。
- 対策
- 場当たり的な対応ですが、$bodycache_statusが'cached'になっていたら、bodycacheによりconvert_htmlの実行がスキップされたと見なして、$contents_idをインクリメントするコードを追加しました。
function convert_html($lines) { //省略 static $contents_id = 0; global $bodycache_status; if ( $bodycache_status === 'cached' ) { //bodycacheから取得済み ++$contents_id; } //省略 $body = & new Body(++$contents_id); //省略 }
- 場当たり的な対応ですが、$bodycache_statusが'cached'になっていたら、bodycacheによりconvert_htmlの実行がスキップされたと見なして、$contents_idをインクリメントするコードを追加しました。
追記
改良したbodycache patchを公開しました。
2015/01/23(金)タイトルプラグイン
タイトルプラグイン(PukiWiki)導入
ECO-Wiki (acronia)にタイトルプラグインを導入しました。これで、ページ名(URL)とは別に、自由にタイトルを設定できるようになります。
導入した理由ですが、検索エンジンでの検索結果には基本的にタイトルが表示されるので、そこを分かりやすくしたかったからです。あとは、うまく使えば検索結果の上位に表示されやすくなってくれるかな~。
bodycacheとの干渉
タイトルプラグインですが、すんなり導入できるかと思ったら、bodycacheと干渉しました^^;
タイトルはbody部に含まれないので、確かにそのままだとタイトルはキャッシュ対象外になってしまいます。
対策としては、bodycache側を改造して、タイトルもbodycacheファイルに含めるようにしました。(ファイル構造が変わるのでバージョンを1から2に変更。)
追記: 2015/01/24
今のECO-Wikiの構成だと、ページ内の最初の見出しがほぼタイトル相当なので、最初の見出しをタイトルとして使うようにPukiWikiを改造しました。
そのため、わざわざ#titleで指定する必要はほとんどなくなりました。(#titleによる指定も引き続き可能です。)