[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 メーリングリストの案内