1

PHP/CSS 在字符串中查找单词,更改其颜色以进行显示。遇到问题,找不到解决方案,有什么建议吗?谢谢。

      <pre>

      <?php 
      $str="Try to realize the truth... there is no spoon."; // spoon can be anywhere in string
      $array = explode(" ", $str);
for($i=0;$i < count($array);$i++)
     {
       if ($array[$i] == "spoon") {
             ?><span style="color:red;"><?php echo echo $array[$i]." "; ?></span>
             <?php
           } else {
              echo $array[$i]." ";
           }   
     } ?>

      </pre
4

4 回答 4

5

我个人会使用:

function highlight($text='', $word='')
{
  if(strlen($text) > 0 && strlen($word) > 0)
  {
    return (str_ireplace($word, "<span class='hilight'>{$word}</span>", $text));
  }
   return ($text);
}

$str="Try to realize the truth... there is no spoon."; // spoon can be anywhere in string
$str= highlight($str, 'spoon');

注意: str_ireplace 是不区分大小写的版本 str_replace。

另外......显然你需要在某处定义'hilight'的css!

于 2012-08-07T13:33:25.447 回答
4

你正在寻找preg_replace().

preg_replace('/\b(spoon)\b/i', '<span style="color:red;">$1</span>', $str);

DaveRandom 的注释:

\b是一个词边界断言,以确保您不匹配茶匙或勺子,并且()是用于替换的捕获组,因此大小写保持不变。

i最后确保不区分大小写,并将$1匹配的单词放回替换字符串中。

于 2012-08-07T13:31:06.530 回答
1

你找不到“勺子”,因为你爆炸了一个空间,所以你只会得到“勺子”。

您可以在一行中执行此操作:

str_replace("spoon", "<span style=\"color:red;\">spoon</span>", $str);

希望这可以帮助。

于 2012-08-07T13:35:25.543 回答
1

您的代码不起作用的原因是,当您在“”(空格)上展开时,您希望收到一个带有单词“spoon”的数组,但实际上它是单词“spoon”。(注意句点)添加到数组中,以及为什么您的条件语句if ($array[$i] == "spoon")永远不会触发。

注意: 虽然我同意大多数人的观点并相信他应该使用 str_replace 或 preg_replace 之类的替代方法,但我认为必须说一些关于尝试从“头开始”解决这个问题的事情。

于 2012-08-07T13:32:32.593 回答