使用PHP+MySQL为数据库句子的指定关键词自动添加span样式标签
原代码错误点
- 未对句子做词汇级匹配,直接用完整句子与词汇数组比对,无法命中目标词汇
- 数组遍历逻辑错误:PHP数组默认从0开始索引,循环起始值设为1会漏掉第一条数据,循环条件
$j<=count($data)会触发数组越界 - 存在无效代码:循环内的
$data[]没有对应逻辑,属于语法残留 - 硬编码褒贬词汇列表,不符合从数据库词汇表读取标记规则的需求
完整修改代码
<style> .positive{ background-color: green; color: #fff; padding: 0 2px; border-radius: 2px; } .negative{ background-color: red; color: #fff; padding: 0 2px; border-radius: 2px; } </style> <?php // 替换成你自己的数据库连接配置 $conn = mysqli_connect('localhost', '数据库账号', '数据库密码', '数据库名'); mysqli_set_charset($conn, 'utf8'); // 1. 从词汇表读取所有标记规则,生成替换映射 $replaceMap = []; $wordQuery = mysqli_query($conn, "SELECT words, type FROM 你的词汇表名"); while ($word = mysqli_fetch_assoc($wordQuery)) { $className = $word['type'] == 'good' ? 'positive' : 'negative'; // \b用于匹配完整单词,避免匹配到单词的一部分,i表示不区分大小写,不需要可以删除 $pattern = '/\b' . preg_quote($word['words'], '/') . '\b/i'; $replaceStr = '<span class="' . $className . '">$0</span>'; $replaceMap[$pattern] = $replaceStr; } // 2. 读取句子表,逐句处理输出 $sentenceQuery = mysqli_query($conn, "SELECT sentences FROM 你的句子表名"); while ($row = mysqli_fetch_assoc($sentenceQuery)) { $processedSentence = preg_replace(array_keys($replaceMap), array_values($replaceMap), $row['sentences']); echo $processedSentence . '<br>'; } mysqli_close($conn); ?>
功能说明
代码会自动匹配句子中的完整目标词汇,给对应词汇套上指定的span标签,完全符合预期输出效果。如果需要严格区分大小写匹配,删掉正则末尾的i参数即可。
内容的提问来源于stack exchange,提问作者rickyfajrin93
相关产品推荐
相关产品推荐

