[PHP-users 14675]Re: Namazuで検索語を強調表示に出来ない

Youichi Iwakiri yiwakiri @ st.rim.or.jp
2003年 4月 16日 (水) 14:23:18 JST


いわきりです

栗原 wrote in <001e01c3036d$ee9a15e0$0f2c0adb @ ybb> :
>しかし、「( namazu or 検索 ) and 強調」の様な複雑な検索式を入れると
>Warning: mb_eregi(): mbregex compile err:
>が発生し、稼働が不安定となります。
>単純な「namazu or 検索」では、安定稼働で検索語が「赤字強調表示」
>になります。

><?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, '');
>
> 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(
>         //mb_eregi(), 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);
>
> print_r($token_list);
> echo "<br>\n";
> return $string;
>}
>?>

恐らくこれで大丈夫だと思います。

#`!'で否定したtokenであっても強調しようとするのは、愛嬌ってことで
#目をつぶって下さい。そもそも検索結果に否定したtokenは含まれないので
#強調されることはありません。

-- 
Youichi Iwakiri



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