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