diff --git a/app/index/common.php b/app/index/common.php
index de61e023..81d3df13 100644
--- a/app/index/common.php
+++ b/app/index/common.php
@@ -222,3 +222,22 @@ if (!function_exists('get_platform')) {
return $platform;
}
}
+
+if (!function_exists('highlight_keywords')) {
+ /**
+ * 高亮关键词
+ * @param string $item
+ * @param string $keywords
+ * @param array $class
+ * @return string
+ */
+ function highlight_keywords(string $text, string $keywords, array $class=[]): string
+ {
+ return preg_replace_callback('/' . preg_quote($keywords, '/') . '+/i', function($match) use($text, $class) {
+ if (empty($match)) {
+ return $text;
+ }
+ return '' . $match[0] . '';
+ }, $text);
+ }
+}
diff --git a/app/index/controller/Product.php b/app/index/controller/Product.php
index 74510312..b16ded89 100644
--- a/app/index/controller/Product.php
+++ b/app/index/controller/Product.php
@@ -299,9 +299,9 @@ class Product extends Common
'query' => request()->param()
])
->each(function ($item) use($keywords) {
- $item['spu'] = str_replace($keywords, ''.$keywords.'', $item['spu']);
- $item['name'] = str_replace($keywords, ''.$keywords.'', $item['name']);
- $item['short_name'] = str_replace($keywords, ''.$keywords.'', $item['short_name']);
+ $item['spu'] = highlight_keywords($item['spu'], $keywords, ['redpoint']);
+ $item['name'] = highlight_keywords($item['name'], $keywords, ['redpoint']);
+ $item['short_name'] = highlight_keywords($item['short_name'], $keywords, ['redpoint']);
return $item;
});
View::assign('products', $products);
diff --git a/app/index/model/ProductModel.php b/app/index/model/ProductModel.php
index 5b8a74f3..a4be17ef 100644
--- a/app/index/model/ProductModel.php
+++ b/app/index/model/ProductModel.php
@@ -79,6 +79,6 @@ class ProductModel extends ProductBaseModel
// 关键词搜索
public function searchKeywordsAttr($query, string $keywords)
{
- $query->whereRaw('BINARY spu LIKE "%' . $keywords . '%" OR BINARY name LIKE "%' . $keywords . '%" OR BINARY short_name LIKE "%' . $keywords . '%"');
+ $query->whereRaw('spu LIKE "%' . $keywords . '%" OR name LIKE "%' . $keywords . '%" OR short_name LIKE "%' . $keywords . '%"');
}
}