1

私は新聞アプリケーション用の単純な検索エンジンに取り組んでいます。ユーザーがキーワードを入力すると、結果ページが表示され、用語が色で強調表示されます。

私は現在これをやっています:

$title = str_ireplace($term, "<span class='highlight'>$term</span>", $note->Title);

大文字とstr_ireplace()小文字を区別しない検索を行いますが、大文字と小文字がメモと一致しない場合 (つまり、ユーザーが「MONEY」を検索し、メモに「money」と表示されている場合)、次のようになります。

マルビナス | Resultados de la búsqueda

   1. malvinas: Argentina va a la ONU y Londres se enfurece » en Actualidad  
      [...] Naciones Unidas, Ban-Ki Moon, ante quien reiterará que se cumplan las
resoluciones de la ONU sobre el tema de la soberanía de las Islas [...]

メモの元のタイトルは「Malvinas: Argentina va a la ONU y Londres se enfurece」です (「malvinas: 」などではありません)。

元の単語のCaSeを変更せずにハイライトを行うにはどうすればよいですか?

4

2 に答える 2

2

正規表現を使用:

$term = 'hello';
$str = 'Hello there';
$term_escaped = preg_quote($term);
$out = preg_replace("~$term_escaped~i", '<b>\0</b>', $str);

echo $out;

出力:

<b>Hello</b> there
于 2010-03-11T03:04:43.200 に答える
1

大文字と小文字を区別しない修飾子を使用して、backreferencesを使用する必要があります。そうすれば、単語を置き換えるときに、それ自体を (大文字と小文字を維持して) 置き換え、検索で使用された大文字と小文字を置き換えません。

このメソッドを で使用するpreg_replaceと、検索語の配列と、それぞれの一般的な置換パターンを渡すことができます。

于 2010-03-11T03:00:18.827 に答える