#backの戻り先にURLを指定すると指定URLにリンクできない

メッセージ

#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 {



*1 href="javascript: ... 等

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-27 (木) 03:46:10
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.291 sec.

SourceForge