質問箱/3216

カテゴリ
サマリ検索結果の部分強調禁止設定
バージョン1.4.5_1
投稿者てるい?
状態完了
投稿日2005-11-05 (土) 17:56:36

質問

memoやmemoxプラグインを使っていると検索結果の強調表示のつもりでも、内容変更になってしまいます。使い慣れないメンバは内容が変更されていることに気付かないで更新したりしてしまいます。memoやmemoxなどの特定のプラグイン内のキーワード強調は行わない、またはキーワードが含まれていることを示すマークをプラグインの近傍に付加するなどの方法で内容変更を避けることはできないでしょうか?例えば、memoを検索すると<strong class="word0">memo</strong>となります。プラグインを grep で strong と word0 で検索して修正しようと思いましたが、いまいち仕組みが解らず、どこを修正してよいのか検討がつきません。ご助言を頂けたらと思います。

回答

  • 色分けを禁止するのは、設定で可能です。 -- teanan 2005-11-15 (火) 15:33:59
    default.ini.php: 23行目付近
      // 検索文字列を色分けする
    - $search_word_color = 1;
    + $search_word_color = 0;
  • ただ、ご指摘の動作はmemoプラグインの機能で見るとバグっぽく見えます。後々、改善したほうがいいかもしれませんね。 -- teanan 2005-11-15 (火) 15:38:50
  • strong タグを挿入していているのは、プラグインの処理結果やページの記載を最終的にHTMLにする lib/html.php の catbody()なので、現時点では、プラグインの内部処理だけでは解決することはできません。この検索処理の対象から特定の箇所を外すような仕組みが本体側にあれば対応可能かもしれないと思います. -- jjyun 2005-11-15 (火) 21:55:19
  • そうですね、ちと厄介なところなんですよねぇ・・・ -- teanan 2005-11-16 (水) 02:00:23
  • ↓無理矢理ですが (^^; -- 0? 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('"', '&#x22;', $memo_body); // Escape double quotes
    	$memo_body = str_replace(',', '&#x2c;', $memo_body); // Escape commas
  • 受け入れ時に消してるだけです。“<strong class="word0">memo</strong>”と入力したい場合は使えませんが*1。プラグイン側ではこれが限界だと思います。 -- 0? 2005-11-16 (水) 08:41:44
    • あ、表示させなくするわけではありません。記録しないようにするだけです。 -- 0? 2005-11-16 (水) 08:45:15
  • 下記のようにすると、うまくいきました*2。-- teanan 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)では、複数行のメモの場合うまくいきませんでした。 -- 通りすがり? 2005-11-16 (水) 13:35:37
    • あ・・・・確かに (^^; -- teanan 2005-11-16 (水) 13:59:02
    • ということで、ちょっと訂正。 -- teanan 2005-11-16 (水) 14:02:11
      	$pattern  = '/<textarea.+?>.*?<\/textarea>|<[^>]*>|(' . $pattern . ')|&[^;]+;/s';
  • BugTrackを作りました。(dev:BugTrack2/123) 上記の対応案については、1.4.6のファイルリリースも終わった現在、teananさんが自由にコミットしても問題ないですよ (^^; 内容および周辺の検討について掘り下げるのであればBugTrackの方で続けましょう。 -- henoheno 2005-11-24 (木) 00:02:54
    • 毎度お手数をおかけして申し訳ありません。 (^^; -- teanan 2005-11-24 (木) 08:49:24


*1 レアケースですよね?
*2 正規表現って難しい (^^;

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-19 (月) 00:35:30
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.259 sec.

OSDN