official:質問箱/99ページを更新用のフォームを提供するブロック型プラグインを大文字で記述した場合、登録した内容がページに反映されず、"ページが更新しました"と表示される。原因はプラグイン内のロジックでプラグインが大文字で記述されるケースを想定していないため。ページを更新するプラグインでは、ページ内に同一プラグインが複数設置された場合に正しい位置を更新できるよう、更新時にページを再読み込みして、プラグインの記述箇所を探し出す。このとき、小文字で記述されている事を前提としているため、大文字で記述されていると、記述箇所の探索に失敗して更新が空振りする事が原因と思われる。PukiWiki1.3.8では大文字で記述する事を許さないため、1.4への移行時に、大文字での記述を許可するよう仕様が変更されたと思われる。対象はプラグインの一覧から怪しそうな奴をピックアップして挙げただけなので、他にも類似があるかもしれません。原因への言及は類推を多く含みます。09:04:03対象となる標準プラグインと問題の行はarticle(107行目)、comment(73行目)、insert(36行目)、memo(29行目)、paint(246行目)、pcomment(360行目)、vote(21行目)です。抜けていたので追記しました。修正にはi修飾子を付加するだけでよさそうです。15:01:00また、edit(49,86行目)、template(22行目)、tracker(88行目)で判定漏れが発生するようです。私にはこの判定自体意味があるのか分かりませんけど...。15:03:18freezeに関しては凍結判定用のis_freezeが小文字での記述しか許しておらず、freezeのconvertでも処理は行っていないため、この3つに関しては結果オーライになっている模様です。23:31:44蛇足ながらedit、template、trackerの処理について説明すると、凍結されたページ=#freezeが記述されたページなので、editのロジックはfreezeのアクションプラグイン経由で記述されるべき#freezeが、編集時に記述されないため。template、trackerのロジックはいたずら防止の為凍結されたページをテンプレートにする際、凍結されっぱなしだと使えないので、それを解除するロジックですね。少なくともGETおよびPOSTで入力されるプラグインの名前については、小文字でないと受け付けない仕様になっています。init.phpでそのようにフィルタを追加しましたし、元を正せば実際のプラグインファイルが小文字で統一されており、さらに遡ると「タイピングのしやすさ」などからそのようにしたいというような欲求がきっとあるのでしょう。同一視している(プラグインだと認識しているが、小文字かどうかといったチェックをしていない)部分だと思います。23:32:57大文字を小文字にして保存するように対策した方が簡単ではないでしょうか。#hogehogeに変換して保存しては、ということです。書き込む部分に特化した話ということで了解しました。フラグを追加しました。これで更新可能になるはずです(更新時には、プラグイン名は強制的に小文字に変換されるでしょう)。どなたかが試して、問題ない様だったら完了にしましょう。19:02:17上記プラグインのいくつかで判定漏れが発生します。判定漏れは"#commentA"などの記述がされた行が"#comment"の前にあった場合に、"#commentA"の行の前にコメントを追加してしまう、というものです。"#commentA"というプラグインが有った場合にも勿論発生する為、注意が必要です。これを回避するには判定を従来の"/^#comment/i"から"/^#comment$/im"に変更する必要が有ります。ちなみに、#freeze判定で用いられている\s*に関しては、正常に動作しないため不要と思われますので、削除してもよいと思われます。19:18:21ブロック型プラグインで、括弧の閉じ忘れ(例えば"#pcomment(コメント,"など)や括弧の後ろに不適当な文字があった場合にもプラグインを認識してしまいます。convert_html.phpの135行目の正規表現を/^\#([^\(]+)(?:\((.*)\))?$/m"とすることで回避できるようです。