[PHP-users 32614] phpで検索キーワードのハイライト処理

Masaaki Suga suga @ tenrikyo.or.jp
2007年 9月 8日 (土) 13:53:58 JST


須賀です

phpで検索キーワードのハイライト処理をしたいのですが
今できているのは,一般的なやり方で,
検索語を<span class="hilite">・・・<span>にするようにしたものです
以下ソース
function hilight($str,$jyoken_arr) { // ハイライト用サブルーチン $strが元の文字列,$jyoken_arrが検索キーワードの配列
$jyoken_arr_preg=array();
$jyoken_arr_strong=array();
foreach ($jyoken_arr as $value) {
if (($value=="") or ($value==" ") or ($value==" ")) {continue;} // 検索キーワードが空白やnullの場合は何もしない

$jyoken_arr_preg[]="/".$value."/";
$jyoken_arr_strong[]="<span class=\"hilite\">".$value."</span>";
}
return preg_replace($jyoken_arr_preg, $jyoken_arr_strong, $str); // ハイライトのスタイルタグをつけて返す
}
※ $jyoken_arrは検索条件をばらばらにした配列です(複数キーワードAND検索対応)

しかし,これでは
<a href="xxxx">yyyy</a>

もし検索語がxxxにひっかるようなものだと,そこに
<span class="hilite"・・・が挿入され,htmlが正常に表示されなくなりました

そこで,htmlタグ内の検索語は無視するようにするには,このサブルーチンをどうすればいいのでしょうか?


正規表現は,いまだによくわからないので,どなたかアドバイスください

よろしくお願いします


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