突出显示 PHP 中的搜索关键字未正确突出显示

Highlight search keyword in PHP does not highlight correctly

我试图在 PHP 搜索中突出显示我的搜索结果,但它突出显示了不受欢迎的

我使用下面的代码

//connection to db
define('DB_HOST', 'localhost');
define('DB_NAME', 'dbname');
define('DB_USERNAME','root');
define('DB_PASSWORD','');

$con = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
if( mysqli_connect_error()) echo "Failed to connect to MySQL: " . mysqli_connect_error();


//get search term
$searchTerm = $_GET['term'];

$result = mysqli_query($con, "SELECT `location` FROM `locations` WHERE TRIM(location) LIKE '%".($_GET['term'])."%'");   

$data = array();
while ($row = mysqli_fetch_assoc($result)) 
{

        $name = str_replace($searchTerm, "<span style='background-color:pink;'>$searchTerm</span>", $row['location']); 
        array_push($data, $name);   
}   



//return json data

echo json_encode($data);

假设我搜索词条 makutano 我最终得到如下所示的结果:

我希望它只会突出显示 makutano,但它没有按预期工作。

如果我删除 str_replace($searchTerm, "<span style='background-color:pink;'>$searchTerm</span>" 代码,我的结果将如下图所示

我的数据库位置看起来像

我的代码哪里出错了?任何帮助将不胜感激

如果您想显示信息,您必须连接一个字符串(我用 implode() 这样做)而不是创建一个 JSON 对象:

//get search term
$searchTerm = htmlspecialchars($_GET['term']);

$result = mysqli_query($con, "SELECT `location` FROM `locations` WHERE TRIM(`location`) LIKE '%".($_GET['term'])."%'");   

$data = array();
while ($row = mysqli_fetch_assoc($result)) 
{
    $name = $row['location']; 
    array_push($data, $name);   
}   

$string = '"' . implode('","', $data) . '"';
$newString = str_replace($searchTerm, "<span style='background-color:pink;'>$searchTerm</span>", $string); 
echo $newString;

创建字符串后,您可以执行替换以将标记添加到字符串。


Your script is at risk for SQL Injection Attacks. Learn about prepared statements for MySQLi。我使用 htmlspecialchars().

完成了这段代码中的最低限度