我正在构建一个搜索,用<span>
标记包装搜索到的文本,我有这个代码工作正常:
str_ireplace($q,'<span>'.$q.'</span>',$row[name]);
问题是,如果用户搜索Tom
将显示Tom
这很酷,但如果他们放入tom
因为str_ireplace
它会显示tom
,这有意义吗?真正的问题是,如果有人进入tOm aRnFeLd
虽然它会搜索好,但美学实际上会显示在页面上tOm aRnFeLd
如何保留两个字符串的大写字母和小写字母?有没有更好的方法来从字符串中包装不区分大小写的文本?
使用stristr从大海捞针,不区分大小写
$keyword_caseRetained_all = stristr($excerpt, $keyword);
但是它也会返回针头和其他干草堆,所以你必须使用substr才能保留针头部分。从位置0开始,达到关键字的长度
$keyword_caseRetained = substr($keyword_caseRetained_all, 0, strlen($keyword) );
现在在str_ireplace函数中使用该变量
$excerpt = str_ireplace($keyword, '<em>'.$keyword_caseRetained.'</em>', $excerpt);
一旦你知道这一点,你就可以在一个漂亮的老鼠巢中组合第1行和第2行来缩短你的代码。
或者将此作为方法添加到字符串操作类。