可能重复:
突出显示段落中的关键字
这是另一个问题。我在php中遇到了一个小问题,我想在自己找到一个特别普通的解决方案之前,也许有一种更简单、更快的方法来解决这个问题。
假设我有一个字符串,其中包含HTML段落标记,如:
$string="<p>Hello this is nick</p>
<p>i need some help over here</p>
<p></p><p>Does anyone know a solution</p>"
还有一系列包含一些"线索"单词的刺痛:
$array=("Hello","nick", "help", "anyone", "solution")
我现在想做以下事情:在浏览器中输出$string
,但"线索"单词应具有特殊格式,例如粗体或高亮显示。
让我觉得这有点困难的是,我想保持段落的原样。换言之,我希望最终输出与原始输出完全一样(包括新行/新段落),但带有一些粗体
我想我可以使用strip_tag来删除<p>
和</p>
标记,然后用空格分割返回的字符串。以便得到一组单词。然后,我将通过检查该单词是否包含在$array
中来单独输出该单词。如果是,那么它将以粗体样式输出。
这样一来,我显然失去了新段落的概念,所有段落都将合并为一个段落。
有什么简单的方法可以解决这个问题吗?例如,一种了解单词"Hello"在新段落中开始的方式?或者我还能做些什么吗?
只需将单词替换为其自身的格式化版本。下面的正则表达式保留大小写并只替换完整的单词(例如,在单词"snicker"中,它内部的单词"nick"不会被替换)。
preg_replace( '/'b('.implode( '|', $array ).')'b/i', '<em>$1</em>', $string );
为什么不直接替换提示词?
$string = str_ireplace(array('hello', 'nick'), array('<strong>hello</strong>', '<strong>nick</strong>'), $string);
(当然,传递给函数的第二个数组将预先生成)
使用str_replace并用粗体标记替换单词