[PHP-users 14672]Re: Namazuで検索語を強調表示に出来ない
栗原
kuri6005 @ ybb.ne.jp
2003年 4月 16日 (水) 01:41:58 JST
栗原@質問者です。
いわきり様のソースを参考にさせて頂いております。
いわきり様直々にアドバイス頂けるとは感激です。
いわきり様 wrote
> 無いです。
> namazu拡張モジュールはlibnmzのwrapperで、libnmz自体は、
> 検索および、検索結果を返す機能は提供していますが表示するために
> 結果を加工(強調とか)するような関数はありません。
>
> namazu拡張モジュールは、素の結果しか返さないので、
> PHP側で如何様にも加工が出来ると言う点が売りだと思います。
>
> 検索に用いられたkeywordは、nmz_get_query_token()で得られるので
> 検索結果と比較し、強調したい部分を加工すれば良かったはず。
いわきり様アドバイスをもとに、下記の関数を作成致しました。
ありがとうございました。
しかし、「( namazu or 検索 ) and 強調」の様な複雑な検索式を入れると
Warning: mb_eregi(): mbregex compile err:
が発生し、稼働が不安定となります。
単純な「namazu or 検索」では、安定稼働で検索語が「赤字強調表示」
になります。
解決のヒントが頂ければ幸いです。
環境:Windows Me, Apache1.3.26, PHP4.3.1, namazu2.0.12
namazu拡張モジュール:php_4.3.x-namazu_3.0.0-win32
<?php
//Emphasize関数(検索語を強調表示)
function emphasize($string, $token_list){
$emphasis_tags =array(
"<strong><font color=\"red\">",
"</font></strong>"
);
$em_start_mark = '\xFF\xFD';
$em_end_mark = '\xFF\xFE';
array_unshift($token_list, '');
reset($token_list);
while ($token = next($token_list)) {
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;
}
?>
PHP-users メーリングリストの案内