preg_替换动态内容


Preg_replace dynamic content?

我使用preg_replace在我的站点上创建搜索内容的片段,并突出显示搜索的术语(如google)。当我在页面上使用静态变量时,它会工作,但当我从数据库检索数据时,它不会。代码如下:

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"有效。但是当我从数据库中获取数据时,它没有。

数据库文本样本(包含html,可能是问题),

<h2>Investments<h2>
<hr />
<p>We are happy to consult on your investments</p>

如何去剥离html标签的字符串??并使preg_replace工作????

可以运行:http://codepad.org/Ve1dhj8q

但是,如果您粘贴一个真实的数据库结果会更好,因为问题可能就在那里。

编辑

这就是你想要的。您可以使用preg_match()来捕获($matches[1])之前和($matches[2])之后的内容,并且不要忘记检查是否找到任何匹配(使用count())。唯一剩下的就是添加之前发布的代码,以便突出显示单词。$limit为偏移量

$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur tempor egestas. Nam arcu augue, bibendum sed pulvinar at, posuere ut massa. Duis tristique suscipit rutrum. Curabitur eu est sed sem consequat consequat ut sed erat. Aliquam ac eros est. Nulla posuere dolor eu arcu tempus suscipit auctor velit condimentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas sollicitudin diam ut neque laoreet vitae placerat tortor commodo. Aliquam vehicula aliquet arcu non molestie. Sed adipiscing faucibus faucibus. In eget velit non elit ullamcorper consequat.';
$limit = 50;
$keyword = 'tempus';

preg_match('/(.{0,'.$limit.'})'.$keyword.'(.{0,'.$limit.'})/', $text, $matches);
echo var_dump($matches);

示例输出

array(3)
{
  [0]=> string(106) " Aliquam ac eros est. Nulla posuere dolor eu arcu tempus suscipit auctor velit condimentum. Class aptent t"
  [1]=> string(50) " Aliquam ac eros est. Nulla posuere dolor eu arcu "
  [2]=> string(50) " suscipit auctor velit condimentum. Class aptent t"
}

如果你出于设计/标记的目的需要限制短语,比如100个单词(例如,如果你的div容器只能容纳一定数量的字符,以保持布局的平衡),你可以这样做:

$limit = 0;
$total = 100;
$keyword = 'yumm';
$limit = (int) ($total - strlen($keyword)) / 2);

可以直接使用PHP的strip_tags()函数

$text = strip_tags($row->content);