1

PHPでpreg_replaceを使用してキーワード検索テキストを強調表示したいのですが、問題は括弧文字列()

私の関数は次のようになります...

$text_oritinal = "25 Hours: Colour In White (CD)";

function highlight($text_search, $text_original) {
  $str = preg_replace('#'. $text_search .'#i', '<span style="background-color:#FFFF66; color:#FF0000;">\\0</span>', $text_original);
  return $str;
}

完全な元のテキストは"25 Hours: Colour In White (CD)"

例えば。キーワードを使用する場合

$text_search = "25 Hours: Colour In White";

ハイライトの背景とテキストの色で適切に置き換えられたキーワードを返します。

<span style="background-color:#FFFF66; color:#FF0000;">25 Hours: Colour In White</span> (CD)

しかし!このキーワードを使用する場合、括弧文字列()

$text_search = "25 Hours: Colour In White (CD)";

置き換えられた背景とテキストの色は返されません。

(かっこでこだわっていると思います)

(問題は、括弧文字列と)?で問題なく一致したすべてのテキストキーワードを強調表示する方法です。

あなたのアイデアを共有してください。ありがとう :)

4

2 に答える 2

3

あなたは電話する必要がありますpreg_quote

function highlight($text_highlight, $text_search) {
  $str = preg_replace('#'. preg_quote($text_highlight) .'#i', '<span style="background-color:#FFFF66; color:#FF0000;">\\0</span>', $text_search);
  return $str;
}

説明:

括弧はを作成するために使用されますsubmatches。それらを検索文字列で使用すると、予約文字であるため、望ましくない結果が発生します。preg_quote正規表現の予約文字をエスケープするを使用することで、これや他の文字を防ぐことができます。

于 2012-08-06T14:50:12.897 に答える
0

正規表現に入れたテキストをpreg_quoteでラップします

http://php.net/manual/en/function.preg-quote.php

于 2012-08-06T14:49:56.797 に答える