PHPでデータベースから英単語とその意味を表示するページを下記のように作成しています。
小学校のWord一覧
中学校のWord一覧
SimpleWikipediaの1500_Word一覧
LongmanDictionaryWord一覧
NGSL_Word一覧を見る
Oxford-3000_Word一覧
Oxford-5000_Word一覧
英単語集(14万語)
ANC30000英単語集
これらのページで、単語の一部(複数でも)を検索し、それに当てはまる部分を赤文字で表示しようとしました。
PHPでもプログラムの仕方がわからないので、AIに尋ねました。
「Perplexity」(https://www.perplexity.ai/)、「ChatGPT」(https://chat.openai.com/)を利用しました。
そこで示されたのが、次のような記述でした。
foreach ($keywords as $keyword) {
$text = preg_replace("/$keyword/i", "$0", $text);
}
echo $text;
この中で、$keywordsは検索した複数のwordの配列。$textは検索する文章。
一度に検索して赤文字で示すことができるので大変良かった。
しかし、英単語(あるいは英語の文章)と意味の表で行っているときに、少し不具合を感じることがあった。
「an sp」というような短い文字で複数検索すると、赤い文字を設定するための記述「<span 」などが、2つ目のwordで引っかかってしまうのです。
AIをいろいろ試してみたのですが、うまくいきませんでした。
そこで思いついたのが、文字を赤く変えるのは最後だけにして、それまでは記号で置き換えるというものです。PHPにそれほど詳しくないので、自分の知識の範囲での対処法です。
そこで、上記を、回りくどく
foreach ($word_array as $keys) { //タグのspanの文字がワードの文字に検索されないように一旦記号に置き換える $word_s = preg_replace("/$keys/i", "★$0●", $word_s);//$word_sは検索用 文字列の$wordと同じもの } //記号を赤文字に設定するタグに置き換える $kigou = ['★','●']; $replaces = ["",""]; echo ""; echo str_replace($kigou, $replaces, $word_s); echo "";
と書き換えることによって、「span 」などの文字を置き換えるタグを拾わないようにしたものです。