ページ名に「.」「..」を含んでも果たしていいのだろうか†
- ページ: BugTrack
- 投稿者: reimy
- 優先順位: 普通
- 状態: 完了
- カテゴリー: 本体バグ
- 投稿日: 2003-05-25 (日) 01:21:33
- バージョン: PukiWiki 1.4rc2
メッセージ†
[[:test/..]]というリンクからこのページの編集に入ると、下記のような文字列が編集フォームに自動入力されます。 ↑をクリックして編集画面に入ってみてください。
$1 = :test/..
$2 = :test
$3 = ..
「..」を含むようなページ名は想定されていない? 許されてるのか、許されてないのか…
なお、1.4rc2で発生するが、1.3.4では発生しない。
- 仕様確認なのでしょうけど、ちょっと。ページ名というものであれば、それは変換後の名称で保存すべきとなるので、許されない。が正しいものだと思います。ただ、相対指定時は、その指定が許されるのであれば、良いのでしょう。また、そういう定義に PukiWiki として対応するかどうかは、また別でしょうが。 -- upk
- 現実には、[[:test/../test]]というページも作成可能なんですよ。 -- reimy
- 現状は「../」「./」を含むページ名が許されているわけですが、これらを含むページ名を不可とすれば、newpage.inc.phpで「./hoge」「../hoge」「../../hoge」というような相対指定で新規ページを作成することも可能になるんですよねぇ(もちろんnewpage.inc.phpの改造は必要ですが)。新規ページ作成で相対指定が可能になると非常に便利なんですが、上記のように現状では「../」や「./」を含むページ名が使用可能になってるのでうまくいきません(「../../hoge」など、相対指定なのかページ名なのかの区別ができない)。-- reimy
- proxy.inc を作っていた頃、相対指定の対応をやっていましたが、対応することは、そう難儀でも無いとは思いますが、そもそも、今、そのようなページを作っちゃったところで問題となるのでしょうね。-- upk
- 先頭が ./ や ../ で始まるのは単純なページ名じゃないってのを newpage で処理したいってことでは? 「. や .. を含むページ名は不許可」ってことになっちゃうとかなり扱いにくい感じがします。 --
- a..やa../bなどは許可しています。[[a/..]]や[[a/../b]]のような「相対指定と区別できなくなる可能性のある部分を含むページ名」を禁止しました。 -- ぱんだ
- newpage.inc.phpとpukiwiki.skin.ja.phpへのパッチを添付しました。ページ上部の[新規]をクリックして表示される[新規作成]ボックスに、元のページからの相対位置(../hogeなど)を指定できるようにしてあります。たとえばこんな感じです。 -- ぱんだ
- ついでに「/test」と指定した場合は「test」と同義にしてしまうのもいいかも。どうせ「/test」は「有効なWikiNameではありません」だし。「/」だけだとFrontPageへの移動に。 -- reimy
- なるほど。 -- ぱんだ
- こんな感じかな? -- reimy
- make_link.php
// 相対参照を展開
function get_fullname($name,$refer)
{
global $defaultpage;
+ if ($name == '/')
+ {
+ return $defaultpage;
+ }
+
+ if (substr($name,0,1) == '/')
+ {
+ return substr($name,1);
+ }
+
if ($name == './')
{
- この変更で下記のような動作になります。-- reimy
- 「/」 FrontPageへ移動
- 「/HogeHoge」 HogeHogeと同じ(一番上の階層のHogeHogeに移動)
- 「../」 上の階層へ移動(上の階層がない場合はFrontPageへ移動)
- 「../HogeHoge」 カレントページと同階層のHogeHogeに移動
- 「./」 カレントページを再表示
- 「./HogeHoge」 カレントページの下階層のHogeHogeに移動