【问题标题】:Retain case when using str_ireplace?使用 str_ireplace 时保留大小写?
【发布时间】:2010-01-22 17:30:26
【问题描述】:

我正在构建一个搜索,它将用<span> 标签包装搜索到的文本,并且我的这段代码可以正常工作:

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

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

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

【问题讨论】:

    标签: php string text replace word-wrap


    【解决方案1】:

    使用 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 行合并到一个漂亮的老鼠窝中以缩短您的代码。

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

    【讨论】:

      【解决方案2】:
      1. 获取短语长度strlen()
      2. 使用stripos() 查找出现的短语
      3. 在文本的 N 个字符之后插入文本 &lt;span&gt;(其中 N 是第 2 点的结果)
      4. 在文本的 N+M 字符之后插入文本 &lt;/span&gt;(其中 N 是点 #2 的结果,M 是点 #1 的结果)
      5. 继续第 2-4 点(使用 strpos() 的第三个参数 - offset

      【讨论】:

        猜你喜欢
        • 2011-03-30
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 2014-07-31
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多