You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP搜索多关键词高亮实现问题求助

实现多关键词搜索高亮的解决方案

你的代码已经完成了多关键词的搜索逻辑,但高亮部分没跟上——只需要在输出搜索结果时,对每个关键词逐一做替换,就能实现多关键词高亮效果。我帮你修改代码,同时补上安全防护细节:

核心修改思路

  • 先对输出内容做HTML转义,防止用户输入恶意代码(XSS攻击)
  • 遍历所有搜索关键词,把字段内容里的每个关键词替换成带高亮样式的HTML标签
  • 支持不区分大小写的高亮,提升用户搜索体验

修改后的完整代码

<form method="get"> <!-- 统一用GET更符合搜索场景,方便用户收藏链接;若要POST,把所有$_GET改成$_POST即可 -->
    <input type="text" name="keyword" value="<?php if(isset($_GET["keyword"])) echo htmlspecialchars($_GET["keyword"]); ?>" />
    <input type="submit" name="submit" value="Search" />
</form>

<?php
if(isset($_GET["keyword"]) && !empty(trim($_GET["keyword"]))) {
    $keyword = trim($_GET["keyword"]);
    $query = explode(" ", $keyword);
    // 过滤空关键词(比如用户输入多个空格的情况)
    $query = array_filter($query, function($item) {
        return !empty(trim($item));
    });

    if(!empty($query)) {
        $condition = '';
        foreach($query as $text) {
            $escaped_text = mysqli_real_escape_string($conn, $text);
            $condition .= "name LIKE '%{$escaped_text}%' OR ";
        }
        $condition = substr($condition, 0, -4);
        $sql_query = "SELECT * FROM products WHERE " . $condition;
        $result = mysqli_query($conn, $sql_query);

        if(mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_array($result)) {
                // 先转义数据库内容,防止XSS
                $product_name = htmlspecialchars($row["name"]);
                // 遍历每个关键词,替换为高亮标签
                foreach($query as $text) {
                    $escaped_text = htmlspecialchars($text);
                    // str_ireplace实现不区分大小写的高亮,要严格区分的话换成str_replace
                    $product_name = str_ireplace($escaped_text, "<span style='background-color: yellow;'>{$escaped_text}</span>", $product_name);
                }
                // 输出带高亮的结果
                echo $product_name . "<br>";
            }
        } else {
            echo '<label>Data not Found</label>';
        }
    } else {
        echo '<label>Please enter a valid search keyword</label>';
    }
}
?>

额外细节说明

  1. 表单方法统一:原代码表单用POST但PHP取$_GET,这里改成GET更符合搜索场景;如果需要用POST,只需把所有$_GET替换为$_POST。
  2. 空关键词过滤:处理用户输入多个空格的情况,避免生成无效的SQL查询条件。
  3. 安全防护:用htmlspecialchars转义用户输入和数据库返回内容,防止恶意HTML/JS代码执行。
  4. 大小写兼容:str_ireplace能实现不区分大小写的高亮,比如用户输入"apple","Apple"或"APPLE"都会被标记,体验更友好。

内容的提问来源于stack exchange,提问作者behroz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:38:02