php 和 mysql 结果标记关键字

php and mysql results mark keywords

我正在尝试使用 php 和 mysql 进行搜索。 我想在搜索结果得到后标记关键字。

我可以像这样不区分大小写。

echo str_ireplace($keyword,'<mark>'.$keyword.'</mark>',$data["text"]);

我的一些字符有问题。

例如

如果我的关键字是 şef 而我的文本有 Şef 我无法替换

其他一些例子

关键字 ağaç 文本 AĞAÇ 关键字 ŞİRİN 文本 şirin

我想替换每一个想法,但我没有。我该怎么做?

如果您的输入是 utf-8,请尝试 preg_replace with case insensitive unicode regex by setting the i and u flags:

$search = '/'.preg_quote($keyword, "/").'/iu';

echo preg_replace($search, '<mark>[=10=]</mark>', $data["text"]);

可能要在搜索词前后添加 \b word boundaries


根据评论更新

要同时匹配 sirin 和搜索词 ŞİRİN 可能需要构建正则表达式模式:

$kw_map = array(
'/[cç]/iu' => "[cç]",
'/[iİ]/iu' => "[iİ]",
'/[gğ]/iu' => "[gğ]",
'/[sş]/iu' => "[sş]",
# ...add more here
);

构建模式:

$keyword = "ŞİRİN";

$search = '/'.preg_replace(array_keys($kw_map), array_values($kw_map), $keyword).'/iu';

如果你 echo $search 它看起来像 /[sş][iİ]R[iİ]N/iu;现在替换:

echo preg_replace($search, '<mark>[=13=]</mark>', $data["text"]);

example on eval.in