大家好,所以我的问题是90%喜欢这个:How to make search results "clickable"
(请阅读)。但唯一的区别是,在最佳解决方案中,str_replace是区分大小写的,我试图用str_ireplace替换它,但问题是这个词在同一时间变成粗体但是小写。谢谢你的帮助!
代码:
if(isset($_POST['tosearchfor']))
{
$query = $db->query('SELECT * FROM searchfor WHERE title LIKE \'%'.$_POST['tosearchfor'].'%\'');
for($i=0; $i<20; $i++)
{
if($result = $query->fetch())
{
$result = str_ireplace($_POST['tosearchfor'], '<b>'.$_POST['tosearchfor'].'</b>', $result);
echo '<div class="result">
<a class="title" href="#">'.$result['title'].'</a>
<span class="link">
<span style="font-size:15px;position:relative;top:0.8px;padding-right:2px;">‣</span>
https://www.qsoft.com/'.$result['link'].'
</span>
<span class="details">'.$result['details'].'</span>
</div>';
}
else
{
if($i==0)
{
echo 'Sorry, no resluts found for : <strong>'.$_POST['tosearchfor'].'</strong>';
}
}
}
}
答案 0 :(得分:1)
你的问题在于这一行:
$result = str_ireplace($_POST['tosearchfor'], '<b>'.$_POST['tosearchfor'].'</b>', $result);
您使用$_POST['tosearchfor']
取代'<b>'.$_POST['tosearchfor'].'</b>'
的所有实例(例如:&#34; apple&#34;)不区分大小写。这会将apple
更改为<b>apple</b>
,将Apple
更改为<b>apple</b>
,将snapple
更改为sn<b>apple</b>
。
您想要的是不区分大小写地将apple
替换为<b>...</b>
所包围的任何匹配项,preg_replace
为您提供该选项。
$result = preg_replace("/\b(" . $_POST['tosearchfor'] . ")\b/i", "<b>$1</b>", $result);
此模式还包含单词边界字符(\b
),因此它不匹配snapple
或apples
,但它将匹配apple
,{ {1}}和Apple
,因为不区分大小写的标记(APPLE
)。然后,它会使用/i
替换所有匹配项,这是第一组括号中匹配的代码,由$1
和<b>
包围。
在此处查看差异:https://ideone.com/PrdQOS