あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

PukiwikiをEUC→UTF-8移行した後もEUCのURLでアクセスできるようにする

http://shrimp.marokun.net/ を微妙に手入れ中です。元のあっきぃのパソコン小屋のURLでもアクセスできるようになったり、Wikiのスキンを変えたりしてます。で、ついでにWikiをUTF-8化しました。
しかし、日本語ページのURLが変わってしまうので、はてブとかブックマークとかリンクが切れてしまいます。それではなんかもったいないので、ざっと改造してみました。
plugin/read.inc.phpの中の、「// 無効なページ名」の手前に、下記のコードを追記します。

		$utfpage = mb_convert_encoding(htmlspecialchars($page), 'UTF-8', 'EUCJP');
		$utfpageurl = rawurlencode($utfpage);
		if (is_page($utfpage)) {
			// ページを表示
			$vars['page'] = $utfpage;
			check_readable($page, true, true);
			header_lastmod($page);
			return array('msg'=>'', 'body'=>'');

		}

一応、これでEUCなURLでも開けるようになるはず……。もしくは、301リダイレクトかな。僕はこっちにしました。(2011/06/01追記)umoriguさんにご指摘を受けた分(rawurlencode分の追加)を反映しました。

		$utfpage = mb_convert_encoding(htmlspecialchars($page), 'UTF-8', 'EUCJP');
		$utfpageurl = rawurlencode($utfpage);
		if (is_page($utfpage)) {
			// リダイレクト
			header("HTTP/1.1 301 Moved Permanently");
			header("Location: $script?$utfpageurl");
			exit;

		}

後者のソースの場合、global命令に$scriptを足してあげてください。