如何在搜索结果中使搜索结果大胆?

时间:2016-08-31 21:28:06

标签: php mysql

大家好,所以我的问题是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;">&#8227;</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>';
                            }
                        }
                    }   
        }

1 个答案:

答案 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),因此它不匹配snappleapples,但它将匹配apple,{ {1}}和Apple,因为不区分大小写的标记(APPLE)。然后,它会使用/i替换所有匹配项,这是第一组括号中匹配的代码,由$1<b>包围。

在此处查看差异:https://ideone.com/PrdQOS