PHPでの検索で、大文字・小文字のどちらにもそのままの文字で色を変える方法

ANC30000英単語集

で検索文字に対応させて、赤文字を表示させようとして、大文字や小文字に関係なく、そして元の大文字小文字を生かしたまま、赤文字で表示させるにはどうすればよいかを、工夫してみた。

もっと簡単な方法もあるのかもしれないが、今の私にはこのくらいのことしか、思いつかなかった。

 

$first = stripos($word, $keyword);//wordの0から数えて何文字目から一致するか。大文字小文字関係ない
if( $first !==false ){
// $wordの中に$keywordと一致するものがない時、falseとなる
$char = strlen($keyword);//半角1文字として。全角は2としてカウント
$mark = substr($word, $first, $char);//$firstから$char文字数をmark
$remark = str_ireplace($mark,"<mark>$mark</mark>",$word);
echo "{$remark}";
} else {
echo $word;
}

stripos関数で、大文字、小文字に関係なく、一致するものがあるか、ないかを調べる。

なければ、falseが返ってくる。あれば0から数えて何文字目にあるかを示してくれる。

次に、strlen関数で、調べるkeywordが何文字あるかを取得する。

subustr関数で、変更するのはwordの何文字目から何文字かを取得する。

この時

str_replace($keyword,"<mark>$keyword</mark>",$word)

を使うと、keywordが「aa」だったとして、wordが「Aa…」なら、「aa…」と変換されてしまう。

wordの中で使用されているkeywordに一致する部分をmarkとして取得し、str_ireplace関数で、大文字・小文字の区別がいらない関数で変換する。

<mark></mark>はstyleで

<style>
mark {
color: #ff0000;
}
</style>

を設定している。