**[[質問箱3/216]] [#k9f1c02e] #author("2018-03-11T16:02:12+09:00;2006-06-19T00:35:30+09:00","","") **[[質問箱/3216]] [#k9f1c02e] |RIGHT:70|LEFT:410|c |~カテゴリ|| |~サマリ|検索結果の部分強調禁止設定| |~バージョン|1.4.5_1| |~投稿者|[[てるい]]| |~状態|完了| |~投稿日|&new{2005-11-05 (土) 17:56:36};| ***質問 [#vb9f2327] memoやmemoxプラグインを使っていると検索結果の強調表示のつもりでも、内容変更になってしまいます。使い慣れないメンバは内容が変更されていることに気付かないで更新したりしてしまいます。memoやmemoxなどの特定のプラグイン内のキーワード強調は行わない、またはキーワードが含まれていることを示すマークをプラグインの近傍に付加するなどの方法で内容変更を避けることはできないでしょうか?例えば、memoを検索すると<strong class="word0">memo</strong>となります。プラグインを grep で strong と word0 で検索して修正しようと思いましたが、いまいち仕組みが解らず、どこを修正してよいのか検討がつきません。ご助言を頂けたらと思います。 ***回答 [#afeb5545] - 色分けを禁止するのは、設定で可能です。 -- [[teanan]] &new{2005-11-15 (火) 15:33:59}; default.ini.php: 23行目付近 // 検索文字列を色分けする - $search_word_color = 1; + $search_word_color = 0; - ただ、ご指摘の動作はmemoプラグインの機能で見るとバグっぽく見えます。後々、改善したほうがいいかもしれませんね。 -- [[teanan]] &new{2005-11-15 (火) 15:38:50}; - strong タグを挿入していているのは、プラグインの処理結果やページの記載を最終的にHTMLにする lib/html.php の catbody()なので、現時点では、プラグインの内部処理だけでは解決することはできません。この検索処理の対象から特定の箇所を外すような仕組みが本体側にあれば対応可能かもしれないと思います. -- [[jjyun]] &new{2005-11-15 (火) 21:55:19}; - そうですね、ちと厄介なところなんですよねぇ・・・ -- [[teanan]] &new{2005-11-16 (水) 02:00:23}; - ↓無理矢理ですが (^^; -- [[0]] &new{2005-11-16 (水) 08:31:31}; memo.inc.php,v 1.14 - 17行目から $memo_body = preg_replace('/' . "\r" . '/', '', $vars['msg']); + $memo_body = preg_replace('/<strong class="word[0-9]">(.+)<\/strong>/', "$1", $memo_body); $memo_body = str_replace("\n", '\n', $memo_body); $memo_body = str_replace('"', '"', $memo_body); // Escape double quotes $memo_body = str_replace(',', ',', $memo_body); // Escape commas - 受け入れ時に消してるだけです。“<strong class="word0">memo</strong>”と入力したい場合は使えませんが((レアケースですよね?))。プラグイン側ではこれが限界だと思います。 -- [[0]] &new{2005-11-16 (水) 08:41:44}; -- あ、表示させなくするわけではありません。記録しないようにするだけです。 -- [[0]] &new{2005-11-16 (水) 08:45:15}; -下記のようにすると、うまくいきました((正規表現って難しい (^^; ))。-- [[teanan]] &new{2005-11-16 (水) 11:40:18}; lib/html.php: 126行目付近 (pukiwiki-1.4.5_1) $s_key = htmlspecialchars($key); - $pattern = '/<[^>]*>|(' . $pattern . ')|&[^;]+;/'; + $pattern = '/<textarea.+?>.+<\/textarea>|<[^>]*>|(' . $pattern . ')|&[^;]+;/'; $callback = create_function( -- こちらの環境(FreeBSD5.4、PHP4.4)では、複数行のメモの場合うまくいきませんでした。 -- [[通りすがり]] &new{2005-11-16 (水) 13:35:37}; -- あ・・・・確かに (^^; -- [[teanan]] &new{2005-11-16 (水) 13:59:02}; -- ということで、ちょっと訂正。 -- [[teanan]] &new{2005-11-16 (水) 14:02:11}; $pattern = '/<textarea.+?>.*?<\/textarea>|<[^>]*>|(' . $pattern . ')|&[^;]+;/s'; - BugTrackを作りました。([[dev:BugTrack2/123]]) 上記の対応案については、1.4.6のファイルリリースも終わった現在、[[teanan]]さんが自由にコミットしても問題ないですよ (^^; 内容および周辺の検討について掘り下げるのであればBugTrackの方で続けましょう。 -- [[henoheno]] &new{2005-11-24 (木) 00:02:54}; -- 毎度お手数をおかけして申し訳ありません。 (^^; -- [[teanan]] &new{2005-11-24 (木) 08:49:24}; #comment