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