[PHP-users 14693]【解決】 Re: Namazuで検索語を強調表示に出来ない

栗原 kuri6005 @ ybb.ne.jp
2003年 4月 17日 (木) 01:19:33 JST


栗原@質問者です。

 いわきり様 wrote
> 恐らくこれで大丈夫だと思います。

いわきり様、and, or他の論理演算子を用いた検索に対応する
ソースまで書いて頂き恐縮です。
ありがとうございます。

稼働確認を致しました。結果、問題なく安定稼働することを確認
致しました。以前問題であったmb_eregi(), mb_eregi_replace()の
稼働不安定も解消されております。

[PHP-users 14675]のいわきり様ソースに加え、栗原は
フレイズ検索、ワイルドカード検索にも対応するようにしてみました。

これで栗原の問題は解決致しました。皆様ありがとうございました。

【全文検索Namazu2.0検索式】
http://www.namazu.org/doc/manual.html#query


<?php
//Emphasize関数(検索語を強調表示)
function emphasize($string, $token_list){
 $emphasis_tags =array(
  "<strong><font color=\"red\">",
  "</font></strong>"
 );
 $nmz_query_op_code = array (
 "\&", "\|", "!", "and", "or", "not", "\(", "\)"
 );
 
 $em_start_mark = '\xFF\xFD';
 $em_end_mark = '\xFF\xFE';
 
 array_unshift($token_list, '');
 $token_list = str_replace("*", "", $token_list);
 $token_list = str_replace("\"", "", $token_list);
 $token_list = str_replace("{", "", $token_list);
 $token_list = str_replace("}", "", $token_list);
 
 reset($token_list);
 while ($token = next($token_list)) {
  $skip = FALSE;
  foreach($nmz_query_op_code as $opcode) {
   if (mb_eregi("^$opcode$", $token)) {
    $skip = TRUE;
    break;
   }
  }
  if ($skip == FALSE) {
   if (mb_eregi("($token)", $string, $match)) {
    $string = mb_eregi_replace(
     $match[1],
     $em_start_mark. $match[1]. $em_end_mark,
     $string);
   }
  }
 }
 $string = htmlspecialchars($string);
 $string = str_replace($em_start_mark, $emphasis_tags[0], $string);
 $string = str_replace($em_end_mark, $emphasis_tags[1], $string);

 return $string;
}
?>



PHP-users メーリングリストの案内