2010-12-14 22 views
5

コメントの検索機能を作成しています。ここの誰かがSQL queryで私を助けました。 私がやりたいことは、結果の検索クエリテキストを強調表示することです。PHP - HTMLを含む文字列のハイライトテキスト

結果は$variableの内部にHTMLとして保存されます。 <span>タグ内で検索クエリテキストを囲む方法はありますか?たとえば、htmlを台無しにすることはできません。

たとえば、検索クエリがfoo barすることができ、出力は次のように見ることができます:あなたが検索用語自体は含まれていないことを確認してください

<p>bla <span class="highlight">foo bar</span> bla bla</p> 

答えて

2

私は、これは、見た目よりも複雑だと思います。私たちは、その後foo barを検索する場合

<p>bla bla foo bar bla</p> 

は、いくつかの特殊なケースについて

<p>bla <span class="highlight">foo bar</span> bla bla</p> 

が、何に変換されますか?

<p>bla bla <span class="foo bar">foo bar</span> bla</p> 

<p>bla <span class="<span class="highlight">foo bar</span>">foo bar</span> bla bla</p> 

として置き換えられます、私は右これでアム:それはfoo barは、HTMLタグ内に一致していることだろうか?私はこの問題に慣れていませんが、CakePHPのドキュメント(フレームワークを使用していないことを知っています)を確認することをお勧めします。テキストヘルパーは、HTMLタグを正しく処理するhighlight()メソッドです。ソースを見て、ショットをつけて、それがあなたのために働くのであれば、それをコピーしてください。

+1

はい、そのような状況が発生する可能性があります。私はその質問に言及すべきだった。とにかく、jQueryを使って簡単な解決策を見つけました! :D – Alex

1
$searchString = 'foo bar'; 
$searchResult = '<p>bla bla foo bar bla</p>'; 

var_dump(str_replace($searchString, '<span>'.$searchString.'</span>', $searchResult)); 

var_dump(preg_replace('/'.$searchString.'/', '<span>'.$searchString.'</span>', $searchResult)); 
1

<p>bla bla foo bar bla</p> 

ので、それはのようなものでなければなりませんHTMLの場合は、str_replace()の助けを借りて"<span>"にまっすぐ進むことができます。

これは、文字列関数を使用してHTMLを処理することが悪い例ではないことに注意してください。それ自体はです。

検索用語にHTMLを含めることができます(ハイライトがタグの枠線にまたがることがある)場合は、はるかに複雑になり、上記のような巧妙なショートカットではなくなりません。

+1

他にも問題があります。たとえば。出力に ' 'があると、マークアップが壊れます。 – Alex

+0

@Alex:これは事実です。基本的な文字列操作を使用するのは、HTMLを扱うためのノー・ノーと一般的に考えられます。この単純化されたアプローチが実行可能かどうかは、データに大きく依存します。コメントに*任意の* HTMLを含めることができれば、あなたは非常に複雑なコーナーになります。 – Tomalak

7

シンプルな検索と置換:

$resultHTML = str_replace($searchString, '<span class="highlight">'.$searchString.'</span>', $resultHTML); 
+1

http://php.net/manual/en/function.str-replace.php –

+4

大文字と小文字を区別しないバージョンもあることを忘れないでください。str_ireplace – jocull

+0

いいです...見つけました –

2
<?php 

$result = "<p>Bla bla foo bar bla bla test x x x</p>"; 

$query = "foo bar"; 

// The important point here is, USE single quote (') in replacement part!! 
echo preg_replace("/($query)/", '<span class="highlight">${1}</span>', $result); 
+1

引用符も、ただエスケープする必要があります。詳細については - http://en.wikipedia.org/wiki/Escape_character – jolt

+0

ありがとうございます。これはmeeeの魅力のように機能します... –

1

私は、同じ質問があったが、私はコードがランダムにハイライトの色を変更するために構築されていますが、これは機能を介して行われ、一つの色を使用するように変更することは容易であるthis

が見つかりました:

 $color = '#FCB514'; //self::generate_colors(); 

最初の投稿!

0

text-shadow:1px 1px 1px#FCD600;

関連する問題