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>
を設定している。