#backの第4引数の“戻り先”にURLを指定することが可能ですが,URLを指定すると指定したURLにリンクできません。
例えば
#back(,,,http://www.yahoo.co.jp)
とすると,出力されるAタグのhrefは"http%3A%2F%2Fwww.yahoo.co.jp"となりdevであれば,
http://pukiwiki.sourceforge.jp/dev/http://www.yahoo.co.jp
にアクセスしようとします。
この現象はWindowsXP上で動作する
back.inc.php,v 1.9 line 42- if ($href != '') { if (PLUGIN_BACK_ALLOW_PAGELINK) { if (is_url($href)) { $href = rawurlencode($href); } else { $array = anchor_explode($href); $array[0] = rawurlencode($array[0]); $array[1] = ($array[1] != '') ? '#' . rawurlencode($array[1]) : ''; $href = $script . '?' . $array[0] . $array[1]; $link = is_page($array[0]); } } else { - $href = rawurlencode($href); + if (is_url($href)) { + $href = htmlspecialchars($href); + } else { + return PLUGIN_BACK_USAGE . ': Set a page name or an URI'; + } } } else { if (! PLUGIN_BACK_ALLOW_JAVASCRIPT) return PLUGIN_BACK_USAGE . ': Set a page name or an URI'; $href = 'javascript:history.go(-1)'; }
投稿者: 名無しさん2 (便宜上の名前ってことで)
投稿日: 2007-11-10 (土) 16:15:12
修正内容など
cvs:plugin/back.inc.php (1.9)
function plugin_back_convert() { - global $_msg_back_word, $script; + global $_msg_back_word, $vars; (中略) $link = TRUE; $href = trim($href); if ($href != '') { if (PLUGIN_BACK_ALLOW_PAGELINK) { if (is_url($href)) { - $href = rawurlencode($href); + $href = htmlspecialchars($href); } else { + $refer = isset($vars['page']) ? $vars['page'] : ''; $array = anchor_explode($href); - $array[0] = rawurlencode($array[0]); - $array[1] = ($array[1] != '') ? '#' . rawurlencode($array[1]) : ''; - $href = $script . '?' . $array[0] . $array[1]; - $link = is_page($array[0]); + $page = get_fullname($array[0], $refer); + if (! is_pagename($page)) + return PLUGIN_BACK_USAGE; + $anchor = ($array[1] != '') ? '#' . rawurlencode($array[1]) : ''; + $href = get_script_uri() . '?' . rawurlencode($page) . $anchor; + $link = is_page($page); } } else { - $href = rawurlencode($href); + if (is_url($href)) { + $href = htmlspecialchars($href); + } else { + return PLUGIN_BACK_USAGE . ': Set an URI'; + } } } else {