到目前为止,我的脚本如下。如果完全匹配,则以粗体显示用户搜索词。例如。如果用户搜索“john bloggs”,那么它将以粗体返回。而如果用户搜索“john”,那么它将显示john bloggs条目,但它不会以粗体显示。任何帮助将不胜感激。
<?
mysql_connect ("localhost", "user","pass") or die (mysql_error());
mysql_select_db ("databasename");
$term = $_POST['term'];
$sql = mysql_query("select * from tablename where category like '%$term%' or title like '%$term%' or postcode like '%$term%' or info like '%$term%' ");
while ($row = mysql_fetch_array($sql)){
echo '<br/> Category: '.str_replace($term,'<b>'.$term.'</b>',$row['category']);
echo '<br/> Title: '.str_replace($term,'<b>'.$term.'</b>',$row['title']);
echo '<br/> Address: '.$row['add1'];
echo '<br/> Street: '.$row['street'];
echo '<br/> City: '.$row['city'];
echo '<br/> Postcode: '.str_replace($term,'<b>'.$term.'</b>',$row['postcode']);
echo '<br/> Phone: '.$row['phone'];
echo '<br/> E-Mail: '.$row['email'];
echo '<br/> Website: '.$row['website'];
echo '<br/><br/>';
}
?>
答案 0 :(得分:2)
我正在使用以下内容:
/**
* higlights search string with HTML5-mark
*
* @param string needle search string
* @param string haystack original text, may contain search string
* @return string original text with additional HTML-mark highlighting
*/
function highlight($needle, $haystack)
{
return preg_replace('/(' . preg_quote($needle, '/') . ')/i', '<mark>$1</mark>', $haystack);
}
用法:
echo '<br/> Category: ' . highlight($term, $row['category']);
答案 1 :(得分:0)
试试这个:
echo '<br/> Category: '.($term == row['category'] ? '<b>'.$term.'</b>' : $row['category']);
答案 2 :(得分:0)
我猜你面临的问题是%term%。在数据库中,它将查找任何匹配的任何位置。因此,如果您尝试将字符串替换为“foo bar”,它将仅搜索匹配的字符串“foo bar”而不是“foo”或“bar”。
您可以执行以下操作
while($ row = mysql_fetch_array($ sql)){
$ terms = explode(“”,$ term);
foreach($ terms为$ wordToReplace)
{
$ category = str_replace($ wordToReplace,'<b>'
。$ wordToReplace。'</b>'
,$ row ['category']);
$ title = str_replace($ wordToReplace,'<b>'
。$ wordToReplace。'</b>'
,$ row ['title']);
$ postCode = str_replace($ wordToReplace,'<b>'
。$ wordToReplace。'</b>'
,$ row ['postcode']);
}
//然后展示它
echo'
分类:'。$ category;
echo'
标题:'。$ title;
echo'
地址:'。$ row ['add1'];
echo'
街:'。$ row ['street'];
echo'
城市:'。$ row ['city'];
echo'
邮编:'。$ postCode;
echo'
电话:'。$ row ['phone'];
echo'
电子邮件:'。$ row ['email'];
echo'
网站:'。$ row ['website'];
}
注意:此代码未经过测试!
答案 3 :(得分:0)
如果你只是寻找快速和功能性的东西你应该没事。如果你想稍微改进一下,你可能想要使用样式而不是<b>
标签,并使用PHP的strcasecmp()函数
例如:
$field = (strcasecmp($term, $row['foo'])==0) ? "<span class='bold'>".$row['foo']."</span>" : $row['foo'];