首先,我要感谢帮助我创建一个非常好的搜索结果查询。 我希望你的朋友可以帮助我改进它。
这是查询
$searchresult = $mysql->query("SELECT * FROM pages WHERE PageContent LIKE '%$searchTerm%'");
if($searchresult->num_rows > 0) {
while (($row = $searchresult->fetch_assoc()) !== null)
{
echo '<h3>' . $row["PageTitle"] . '</h1>';
$position = strpos($row["PageContent"], $search);
$snippet = substr($row["PageContent"], $position - 200, $position + 200);
echo $snippet . '<hr><br />';
}
} else {
echo "<p>Sorry, but we can not find an entry to match your query</p><br><br>";
}
我喜欢做的是使片段修剪的方式不会破坏任何单词以使句子可读......如果可能的话,使搜索词以粗体显示。 亲爱的朋友,我需要你的帮助。 提前谢谢大家。
答案 0 :(得分:0)
还有很大的改进空间,但这是一种方法:
<?php
echo trimsnippet("Some really, really, really reaaally long text I don't really care about, at all.", "text", 30) . "\n";
function trimsnippet($text, $query, $max_length){
$position = strpos($text, $query);
$snippet = substr($text, max($position - $max_length - 1, 0), strlen($query) + $max_length*2 + 1);
echo "<$snippet>\n";
preg_match("/[^\w](?P<pre>.*)".$query."(?P<post>.*)[^\w]/", $snippet, $extracted);
return $extracted["pre"]."<strong>".$query."</strong>".$extracted["post"];
}
真的,真的非常长文字我真的不在乎,
忽略第一行(echo ...),它只是一个演示。 将函数放在使用它的php中的任何位置,然后替换你的行:
$position = strpos($row["PageContent"], $search);
$snippet = substr($row["PageContent"], $position - 200, $position + 200)
使用:
$snippet = trimsnippet($row["PageContent"], $search, 200);