* ページ名が「0」のとき、単語検索の挙動がおかしい [#ie2703e4] - ページ: [[BugTrack2]] - 投稿者: 名無しさん - 優先順位: 低 - 状態: 完了 - カテゴリー: 本体バグ - 投稿日: 2007-05-04 (金) 21:42:18 - バージョン: ** メッセージ [#sccdadcc] ページ名が半角の0だと、単語検索で次のようなことが起こります。 -- キーワードがソース内にあっても、ヒットしません。(ただし、キーワードとページ名が同じ時はヒットします)~ -- $show_passage を1 にしている時、表示されるpassage が異常 例 一覧表示のとき:0 (18m) 0をキーワードにして検索したとき:0 (13637d) 他のページは問題なく表示されています。 1.4のお試しサイトでも、同じことが起こることを確認しました。~ 消されてなければ、すぐに試せると思います。 -------- - [[BugTrack2/179]] にある PHPの配列のキーに「整数として解釈できる文字列」を与えた場合、それは整数になります。 これはPHP言語における配列の仕様のようです。 の内容が、今回の原因みたいです。~ ひとまずの解決法を掲示します。 // $Id: func.php,v 1.87 2007/04/01 11:55:43 henoheno Exp $ (中略) // 'Search' main function function do_search($word, $type = 'AND', $non_format = FALSE, $base = '') { (中略) // Search for page contents foreach ($keys as $key) { - $b_match = preg_match($key, get_source($page, TRUE, TRUE)); + $b_match = preg_match($key, get_source("$page", TRUE, TRUE)); if ($b_type xor $b_match) break; // OR } if ($b_match) continue; (中略) $retval = '<ul>' . "\n"; foreach (array_keys($pages) as $page) { $r_page = rawurlencode($page); $s_page = htmlspecialchars($page); - $passage = $show_passage ? ' ' . get_passage(get_filetime($page)) : ''; + $passage = $show_passage ? ' ' . get_passage(get_filetime("$page")) : ''; (以降、省略) spam対策が一段落したら、チェックをお願いします。 -- &new{2007-05-12 (土) 15:21:29}; - ヒントをありがとうございます :) この件、回りまわって、encode() にstrval()がないのが原因のように見えます。bin2hex()が文字列型を要求しているのに、それ以外を与える隙があります。encode()を呼んでいる全ての関数において同様の症状が起こる可能性がこれで無くなるはずです。 -- [[henoheno]] &new{2007-05-12 (土) 16:40:38}; -- [[cvs:lib/func.php]] (1.88-1.90) - こちらの件の解決を、[[cvs:lib/func.php]] (1.90) で確認しました。[[下の件>#faeaa3d6]]も(たぶん)終わったと思うので、完了にします。ありがとうございました。 -- &new{2007-05-13 (日) 16:54:58}; #comment ** sort() 系関数のオプションを規定していないために、int型に変換されたページ名が適切に並ばない件 [#faeaa3d6] sort() 系関数のオプションで SORT_STRING, SORT_NUMERIC を指定できるタイプのものは、意図に応じて適切に付けましょう - む、検索結果の並び順が "0" "1" など int として格納されるページだけおかしい予感 => ksort() のオプション不足でした。 -- &new{2007-05-12 (土) 17:01:18}; -- ふむ、同様に、sort() 系関数のオプション(ソートの意図)を明確にしていないものが多いな・・・ (^^; -- [[henoheno]] &new{2007-05-12 (土) 17:34:14}; -- grep で sort系の関数を探して、意図をチェックして、一通りオプションを(意図を)明確にしました。これによって、いつどのような理由でページ名を配列のkeyに格納しようとも、ソートの結果には影響をもたらさなくなるはずです。 -- [[henoheno]] &new{2007-05-12 (土) 18:18:20}; -- [[cvs:lib/file.php]] (1.79) -- [[cvs:lib/html.php]] (1.60-1.61) -- [[cvs:plugin/attach.inc.php]] (1.83-1.84) -- [[cvs:plugin/calendar_viewer.inc.php]] (1.35) -- [[cvs:plugin/dump.inc.php]] (1.38) -- [[cvs:plugin/map.inc.php]] (1.17) -- [[cvs:plugin/related.inc.php]] (1.8) -- [[cvs:plugin/rename.inc.php]] (1.28-1.29) -- [[cvs:plugin/versionlist.inc.php]] (1.17) #comment ** 文字列の比較ねた [#j4f71742] - [[BugTrack2/236]] If you compare two numerical strings, they are compared as integers -- &new{2007-05-18 (金) 02:33:23};