-1

如何为给定字符串设置特定单词的样式?

$myString = "foo bar";

如果在字符串中找到给定的单词,如何使函数加粗,而不是再次返回字符串

$formattedString = Bold('foo',$myString);
echo $formattedString ;

预期结果:

foo bar

我怎样才能做到这一点 ?我需要根据键入的用户查询在搜索结果中加粗一些关键字/短语

任何帮助,将不胜感激

4

3 回答 3

1

你的意思是像:

function Bold($text, $str) {
    return str_replace($text, "<strong>".$text."</strong>", $str);
}
echo Bold("test", "this is a test");
于 2012-08-15T05:01:46.070 回答
0

最简单的方法是使用str_replace("foo", "<b>foo</b>", $string).

RegExp可用于执行相同的操作。

更新:要拥有更高级的样式功能,您可以使用以下RegExp方式:

function bold($text, array $words) {
    return preg_replace('/\b('.implode('|', $words).')\b/i', '<b>$1</b>', $text);
}

使用此功能,您可以通过传输应编辑的单词数组来一次设置多个单词的样式。bold

更新:此功能的高级高级变体将如下所示:

function bold($text, $tag, array $words) {
    return preg_replace('/\b('.implode('|', $words).')\b/i', '<'.$tag.'>$1</'.$tag.'>', $text);
}

通过这种方式,您可以bold通过将标签名称传递给参数(例如italic例如)来传输strike您的文本甚至underline任何单词集。$tagb<b></b>

于 2012-08-15T05:01:41.967 回答
-1

通过使用发布的 str_replace 解决方案,当您的单词被发现是另一个单词的一部分时,您将遇到问题。例如,在 Sudhir 的示例中,如果 $str 是“这是一个使用睾酮的测试”(抱歉,没有更好的例子),输出将是

这是一个测试osteron的测试

要解决这个问题,您可以使用正则表达式,因为您有单词边界表达式:

function bold($string, $word)
{
    return preg_replace('/\b'.$word.'\b/', '<strong>'.$word.'</strong>', $string);
}

echo bold('this is a test with testosteron', 'test');

当它被不能被视为单词一部分的元素包围时,该规则将匹配您的单词

于 2012-08-15T05:10:57.767 回答