在给定字符串上设置特定单词样式的函数?

时间:2012-08-15 04:55:56

标签: php

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

$myString = "foo bar";

如果在字符串中找到一个给定单词加粗的函数,那么如何再次返回字符串

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

预期结果:

foo bar

我该怎么做?我需要根据键入的用户查询在搜索结果中加粗一些关键字/短语

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

你的意思是:

function Bold($text, $str) {
    return str_replace($text, "<strong>".$text."</strong>", $str);
}
echo Bold("test", "this is a test");

答案 1 :(得分: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参数传输名称,您可以italicstrikeunderline您的文字甚至$tag任意一组字词标记({em> b用于<b></b>,例如)

答案 2 :(得分:-1)

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

测试 测试 osteron

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

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

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

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