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"]);
我正在尝试使用 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"]);