Footnote のリンクを作る部分について

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

メッセージ

改良と言えるほどの差が出ないぐらい小さなことですが、気になる部分を見つけたので。

  • r1.18 でBugTrack/698に関する修正をした際に、url を定義する部分が、$page にrawurlencode した値を代入する行よりも上に移動したので、この行が意味を成さなくなっています。*1
    他のLink_xxx クラスでparent::setParam() に$page を渡す時には、rawurlencode() した値ではない事と、そもそもこの関数に渡される$page の値が$vars['page'] *2なので、消しても問題はないと思います。残すとしても、if (PKWK_ALLOW_RELATIVE_FOOTNOTE_ANCHOR) の上に置かないと、絶対パスのときに2度同じ処理をすることになります。
  • Footnote へのリンク作成で、本文を埋め込む処理をするときに、文章の長さを2度チェックしています。
    しかし、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() で ($pageを壊していても) いままで大きな問題が発生していないことから指摘通りの修正が可能であると判断しました -- umorigu 2017-10-30 (月) 01:14:29
  • 対応しました commit:2f903cec39 -- umorigu 2017-10-30 (月) 01:21:43


*1 ちなみに、これが元でBugTrack/792の修正が無効化され、BugTrack2/91で修正されたという歴史があるらしい
*2 make_link() の第二引数が設定されている時と、links_get_objects() から回ってくる場合を除く

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-10-30 (月) 01:23:25
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.165 sec.

OSDN