私はpreg_replaceを使用して自分のサイトで検索されたコンテンツのスニペットを作成し、(Googleのように)検索された用語を強調表示しています。それは私のページで静的変数を使用するときに動作しますが、データベースからデータを取得する際には使用しません。コードは以下の通りである:Preg_replace動的コンテンツ?
foreach ($searchcontent ->result() as $row)
{
$text = $row->content;
$keyword = 'investment';
$size = 165;
$snippet = preg_replace(
'/^.*?\s(.{0,'.$size.'})(\b'.$keyword.'\b)(.{0,'.$size.'})\s.*?$/',
'...$1<strong>$2</strong>$3...',
$text
);
echo $snippet;
}
私はのようないくつかの静的コンテンツの変数$ textの内容に変更した場合: "We are happy to consultant on your investments"
それが動作します。しかし、私はdbからデータを取得しません。
データベースからテキストのサンプル(HTMLが含まれている、問題になる場合があります)、
<h2>Investments<h2>
<hr />
<p>We are happy to consult on your investments</p>
はどのようにしてhtmlタグの文字列を剥ぎ取りに行きますか? preg_replaceが動作していますか?
もちろんこれが問題です。 dbは毎回同じHTMLを返しますか?それともそれは変わるのだろうか? – FailedDev
多かれ少なかれ同じフォーマットですが、変化する可能性があります – hairynuggets
普通のhtmlを扱っている限り、 'str_replace()'で十分でしょう。とにかく、言及された「正規表現」の表現は、その主題と比較して過度に複雑に見えます。 – yoda