* [UTF-8] UTF-8に移行したサイトに、移行前のページ名(URL)に対するアクセスがあった場合のケア [#ned71a9e] - 元タイトル: EUC-JP -> UTF-8移行後のページ名について - ページ: [[BugTrack2]] - 投稿者: [[okkez]] - 優先順位: 低 - 状態: 保留 - カテゴリー: プラグイン - 投稿日: 2006-09-22 (金) 01:14:26 - バージョン: 1.4.7 ** メッセージ [#a900a439] EUC-JP -> UTF-8に移行した場合、旧ページ名((日本語を含む))へのアクセスが悲しいことになります。 とりあえず悲しさを軽減できるパッチを作ったので参考までにどうぞ。 Index: read.inc.php =================================================================== --- read.inc.php (revision 225) +++ read.inc.php (working copy) @@ -25,7 +25,15 @@ } else { // 無効なページ名 + if ('EUC-JP' === mb_detect_encoding($page)) { + $page = mb_convert_encoding($page, 'UTF-8', 'EUC-JP'); + $body = make_pagelink($page); + return array( + 'msg'=>'maybe this page?', + 'body'=>$body + ); + } return array( 'msg'=>$_title_invalidwn, 'body'=>str_replace('$1', htmlspecialchars($page), -------- - コメントありがとうございます。重要度と影響範囲を判断できるような状況添えていただければ助かります。例:どのユーザーでも必ず起こるのか、何か適切な手順を踏まなかった時に発生するのか、本来は絶対に起こらないのか。 -- [[henoheno]] &new{2006-09-24 (日) 14:23:12}; -- [[okkez:memo/改造/UTF-8化#n5876a19]] EUC-JP 時代のページ名にアクセスされてもとりあえずUTF-8に変換したリンクを表示するパッチ の件ですね。少しタイトルを修正します。 -- [[henoheno]] &new{2006-09-24 (日) 14:26:04}; -- この件は、元々EUC-JPで公開していたサイトや、相手方がInterWikiの設定を間違えている時にしか発生しないアクセスをケアするためのものです。そのため、上記パッチはEUC-JPのサイト向けのものではないようです。その旨のコメントか、if文がいりそうです。 -- [[henoheno]] &new{2006-09-24 (日) 14:57:45}; -- 汎用化する場合: 上記パッチは UTF-8 化したサイトに対する EUC-JP のケアですが、EUC-JPのサイトにUTF-8化したページ名によるアクセス(InterWikiの設定を間違えている)があった時でも、同じアイデアでフォローできる可能性があると思われます。また、上の例では定数 SOURCE_ENCODING の値が UTF-8 でない時は無効にするのが良さそうですね。 -- [[henoheno]] &new{2006-09-24 (日) 15:01:09}; --- 本家に取り込む場合はそのようにするべきだと思います。-- [[okkez]] &new{2006-09-24 (日) 19:38:17}; - official/devからのアクセスがきっかけになった予感が。 -- [[henoheno]] &new{2006-09-24 (日) 15:04:19}; -- 実はofficial/devはInterWikiを以前、設定しなおしたので問題なかったのです。アクセスログを確認したところ結構色々な人のページでInterWikiを使わずにEUC-JP時代のURIを直接記述しているケースがありました。全てのサイトを修正して回ったりは流石にできないのでこんなパッチを作りました。 -- [[okkez]] &new{2006-09-24 (日) 19:38:17}; - 前後の状況が解ったところで、対応の適切さの件。okkezさんの所に "本当は、変換後のページが存在したらリダイレクトさせたい" とある通りで、 HTTP Locationヘッダで飛ばす方法もあるかもしれませんね。また、(1)指定されたページはないが (2)推測に基づいた別のページならある 時に発動させるべきものなので、そのページが本当に存在するのか確認を入れるのが良さそうです。 -- [[henoheno]] &new{2006-09-24 (日) 15:09:54}; -- リダイレクトさせる場合についてはその通りですね。 -- [[okkez]] &new{2006-09-24 (日) 19:38:17}; -- 各種コメントありがとうございます。あれから少し考えたのですが、ノータイムでLocaitonヘッダを出すのは、文字コード識別関数を信用しすぎで危ないので、やはり事前に移動先のページの存在確認を行った方が良さそうです。 -- [[henoheno]] &new{2006-09-24 (日) 19:47:48}; -- ページが存在しない場合でも、validなページ名の場合は移動させてもいいんじゃないでしょうか。存在しないページ名の場合は単に新規作成になるだけですし。ただし文字コード変換後invalidなページ名になる場合には移動させるとマズイと思います。 -- [[okkez]] &new{2006-09-24 (日) 20:26:29}; #comment