Web サイトの検索ボックスに入力された用語に基づいて、データベースで検索を実行する PHP スクリプトがあります。これは、テキストのブロックを返します。今の私の検索用語が であるとしましょう"test block"
。私の結果の例は、次のテキスト ブロックです。
これは、検索クエリを使用してデータベースから収集されたテキストのテスト ブロックです。
さて、私の質問は、テキスト ブロック内の検索用語を「強調表示」して、ユーザーがこの結果が最初に取得された理由を確認できるようにする方法です。上記の例を使用すると、次のようなもので十分です。
これは、検索クエリからデータベースから収集されたテキストのテスト ブロックです。
これまでにテキストを変更するいくつかのことを試しましたが、実際に遭遇した問題は大文字と小文字の区別に関係しています。たとえば、次のコードを使用した場合:
$exploded = explode(' ', $search_terms);
foreach($exploded as $word) {
// I have to use str_ireplace so the word is actually found
$result = str_ireplace($word, '<b>' . $word . '</b>', $result);
}
それは私$result
とbold
言葉のあらゆる例を通り抜けます。検索結果の 2 番目の例で望んでいたように、これは正しいように見えます。ただし、ユーザーが の"Test Block"
代わりに使用する場合"test block"
、検索用語は大文字になり、次のように表示されます。
これは、検索クエリからデータベースから収集されたテキストのテスト ブロックです。
これは、特にユーザーが小文字の検索用語を使用していて、それらがたまたま文の先頭にある場合には機能しません。
基本的に、私がする必要があるのは、文字列内の単語を見つけ、単語の<b>
直前にテキスト (この例では) を挿入</b>
し、単語自体が置き換えられないようにしながら、単語の直後 (この例では) にテキストを挿入することです。 . これがルールpreg_replace
であり、str_replace
私は信じているので、何をすべきか本当に行き詰まっています。
どんなリードも大歓迎です。