PHP搜索突出显示未定义的错误集错误

时间:2013-11-03 13:39:14

标签: php regex arrays

我有一个搜索表单,如果它位于任何一个页面的正文中,我会突出显示该关键字。我面临的是一些不区分大小写的问题。当用户搜索“SearchMe”时,如果正文包含确切的字符串“SearchMe”,则表明它突出显示。但是当用户写“searchme”时,它会给出未定义的偏移量:函数的1个错误,只是输出并突出显示查询,加上不删除正文中的那个,所以想想它是重复的gots。为什么会发生这种情况?我该如何解决这个问题?

function getSearchResult($str, $query, $numOfWordToAdd) {
list($before, $after) = explode($query, $str);

$before = rtrim($before);
$after  = ltrim($after);

$beforeArray = array_reverse(explode(" ", $before));
$afterArray  = explode(" ", $after);

$countBeforeArray = count($beforeArray);
$countAfterArray  = count($afterArray);

$beforeString = "";
if($countBeforeArray < $numOfWordToAdd) {
    $beforeString = implode(' ', $beforeArray);
}
else {
    for($i = 0; $i < $numOfWordToAdd; $i++) {
        $beforeString = $beforeArray[$i] . ' ' . $beforeString;
    }
}

$afterString = "";
if($countAfterArray < $numOfWordToAdd) {
    $afterString = implode(' ', $afterArray);
}
else {
    for($i = 0; $i < $numOfWordToAdd; $i++) {
        $afterString = $afterString . $afterArray[$i] . ' ';
    }
}

$string = $beforeString . ' <span class="underline"> ' . $query . ' </span> ' . ' ' . $afterString;

return $string;
}

我怎么称呼它:

echo getSearchResult($result->body,$keywords,30);

1 个答案:

答案 0 :(得分:0)

由于您在标签中包含了RegExp,而不只是使用它们? 这应该是技巧(未经测试):

// The 'i' flag at the end of the regexp makes the search case insensitive
$regexp = "#(" . $query . ")#i"; 
$replacement = '<span class="underline">$2</span>';

$string = preg_replace ($regexp, $replacement, $result->body)

请注意,如果$ query包含#,您必须转义它们或使用另一个char(任何char都有效)来包围正则表达式。

如果您只想突出显示第一个匹配项,请将1作为第4个参数添加到preg_replace。

[编辑]:忘记提及:当你有多个关键词要搜索时,请使用:
$query = implode('|', $keywords);
并在上面的代码中使用结果字符串作为查询。