出力を送信する前に処理することにより、検索された単語をサーバー側で強調表示したいと考えています。
「サーバー側」の背後にある理由は次のとおりです。
1) Unicode テキストの Javascript の強調表示がひどい。2) \b Unicode で動作しません (少なくとも JS では、AFAIK)。3) JS では後読みがサポートされていません。
以下の関数を使用していましたが、昨夜、最初の <...> をスキップするように記述された部分が機能していないことに気付きました。
public function ss_highlight($terms, $buf)
{
if (empty($terms)) {
return $buf;;
}
/* sort before using length for better match */
usort($terms, function($a, $b) {
return mb_strlen($b) - mb_strlen($a);
});
$str_terms = implode('|', $terms);
/* server side highlighter */
$buf = preg_replace('/(<[^>]+>)*(?<=[\s|:|\-|>|\(|\)|\.|,|\/|^])('.$str_terms.')(?=[\s|:|\-|<|\(|\)|\.|,|\/]|$)/i', '$1<span class="highlight">$2</span>', $buf);
return $buf;
}
どんなアイデアでも大歓迎です。
よろしく。
PS: OPEN と CLOSE という単語で囲まれていない特定の単語のすべての出現を置き換えるで、いくつかの同様のことを見ましたか? しかし、これを私の要件に合わせる方法がわかりません。