#author("2017-10-30T01:21:43+09:00","","")
#author("2017-10-30T01:23:25+09:00","","")
* Footnote のリンクを作る部分について [#r2f24e80]

- ページ: [[BugTrack2]]
- ページ: [[BugTrack]]
- 投稿者: 名無しさん
- 優先順位: 低
- 状態: 提案
- 状態: 完了
- カテゴリー: その他
- 投稿日: 2008-02-06 (水) 00:27:04
- バージョン: 
- バージョン: 1.4.7
- リリース予定バージョン: 1.5.2

** メッセージ [#cd356370]
改良と言えるほどの差が出ないぐらい小さなことですが、気になる部分を見つけたので。


-r1.18 で[[BugTrack/698]]に関する修正をした際に、url を定義する部分が、$page にrawurlencode した値を代入する行よりも上に移動したので、この行が意味を成さなくなっています。((ちなみに、これが元で[[BugTrack/792]]の修正が無効化され、[[BugTrack2/91]]で修正されたという歴史があるらしい))&br;
他のLink_xxx クラスでparent::setParam() に$page を渡す時には、rawurlencode() した値ではない事と、そもそもこの関数に渡される$page の値が$vars['page'] ((make_link() の第二引数が設定されている時と、links_get_objects() から回ってくる場合を除く))なので、消しても問題はないと思います。残すとしても、if (PKWK_ALLOW_RELATIVE_FOOTNOTE_ANCHOR) の上に置かないと、絶対パスのときに2度同じ処理をすることになります。

-Footnote へのリンク作成で、本文を埋め込む処理をするときに、文章の長さを2度チェックしています。&br;しかし、mb_substr() で本文を切り取った後の$title の長さは、0 からPKWK_FOOTNOTE_TITLE_MAX の間の値であるはずなので、わざわざ切り取り後の長さをmb_strlen() で調べなくても、(PKWK_FOOTNOTE_TITLE_MAX < $count) で文章が省略されたかのチェックができると思うのですが、どうでしょうか?

lib/make_link.php (r1.37) の、Link_note クラス(今回の話題の中心部分に、コメントを打ってあります)
 	function set($arr, $page)
 	{
 		global $foot_explain, $vars;
 		static $note_id = 0;
 
 		list(, $body) = $this->splice($arr);
 
 		if (PKWK_ALLOW_RELATIVE_FOOTNOTE_ANCHOR) {
 			$script = '';
 		} else {
 			$script = get_script_uri() . '?' . rawurlencode($page);
 		}
 
 		$id   = ++$note_id;
 		$note = make_link($body);
 		$page = isset($vars['page']) ? rawurlencode($vars['page']) : ''; //1つ目の話題は、この行
 
 		// Footnote
 		$foot_explain[$id] = '<a id="notefoot_' . $id . '" href="' .
 			$script . '#notetext_' . $id . '" class="note_super">*' .
 			$id . '</a>' . "\n" .
 			'<span class="small">' . $note . '</span><br />';
 
 		// A hyperlink, content-body to footnote
 		if (! is_numeric(PKWK_FOOTNOTE_TITLE_MAX) || PKWK_FOOTNOTE_TITLE_MAX <= 0) {
 			$title = '';
 		} else {
 			$title = strip_tags($note);
 			$count = mb_strlen($title, SOURCE_ENCODING);
 			$title = mb_substr($title, 0, PKWK_FOOTNOTE_TITLE_MAX, SOURCE_ENCODING);
 			$abbr  = (mb_strlen($title) < $count) ? '...' : ''; //2つ目の話題は、この行
 			$title = ' title="' . $title . $abbr . '"';
 		}
 		$name = '<a id="notetext_' . $id . '" href="' . $script .
 			'#notefoot_' . $id . '" class="note_super"' . $title .
 			'>*' . $id . '</a>';
 
 		return parent::setParam($page, $name, $body);
 	}

--------
- 1つ目の話題について、$page と $vars['page'] が一致している根拠がわからなかったのですが、rawurlencode() で(壊れていても)いままで大きな問題が発生していないことから指摘通りの修正が可能であると思いました -- [[umorigu]] &new{2017-10-30 (月) 01:14:29};
- 1つ目の話題について、$page と $vars['page'] が一致している根拠がわからなかったのですが、rawurlencode() で ($pageを壊していても) いままで大きな問題が発生していないことから指摘通りの修正が可能であると判断しました -- [[umorigu]] &new{2017-10-30 (月) 01:14:29};
- 対応しました commit:2f903cec39 -- [[umorigu]] &new{2017-10-30 (月) 01:21:43};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

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

SourceForge