Preg_replace动态内容?

时间:2011-10-30 03:19:15

标签: php regex database preg-replace

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

来自数据库的文本示例(包含html,可能是问题),

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

如何剥离html标签字符串?并让preg_replace工作????

2 个答案:

答案 0 :(得分:1)

这有效: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);

答案 1 :(得分:0)

您可以使用PHP的strip_tags()功能。

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