使用str_ireplace时保留大小写?

问题描述 投票:1回答:2

我正在构建一个搜索,用<span>标记包装搜索到的文本,我有这个代码工作正常:

str_ireplace($q,'<span>'.$q.'</span>',$row[name]);

问题是,如果用户搜索Tom将显示Tom这很酷,但如果他们放入tom因为str_ireplace它会显示tom,这有意义吗?真正的问题是,如果有人进入tOm aRnFeLd虽然它会搜索好,但美学实际上会显示在页面上tOm aRnFeLd

如何保留两个字符串的大写字母和小写字母?有没有更好的方法来从字符串中包装不区分大小写的文本?

php string text replace textwrapping
2个回答
0
投票

使用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行来缩短你的代码。

或者将此作为方法添加到字符串操作类。


0
投票
  1. 获取短语长度strlen()
  2. 使用stripos()查找短语的出现
  3. 在文本的N个字符后插入文本<span>(其中N是从#2点开始的结果)
  4. 在文本的N + M字符后插入文本</span>(其中N是点#2的结果,M是点#1的结果)
  5. 继续点2-4(使用strpos()的第三个参数 - 偏移量)
© www.soinside.com 2019 - 2024. All rights reserved.