【问题标题】:Manipulate HTML paragraphs in php [duplicate]在php中操作HTML段落[重复]
【发布时间】:2012-02-27 08:10:03
【问题描述】:

可能重复:
Highlight keywords in a paragraph

这是另一个问题。我在 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>"

还有一个包含一些“线索”词的stings数组:

$array=("Hello","nick", "help", "anyone", "solution")

我现在想做以下事情: 在浏览器中输出$string,但“线索”单词应具有特殊格式,例如加粗或突出显示。

让我觉得这有点困难的是,我想保持段落原样。换句话说,我希望最终输出看起来与原始输出完全相同(包括新行/新段落),但有些字是粗体

我想我可以使用 strip_tags 删除 &lt;p&gt;&lt;/p&gt; 标签,然后用空格分割返回的字符串。从而得到一个单词数组。然后我将通过检查该单词是否包含在$array 中来单独输出每个单词。如果是,则以粗体样式输出。

这样一来,我显然失去了新段落的概念,所有段落都将合并为一个。

有没有简单的方法来解决这个问题?例如,一种获得知识的方法,例如“你好”这个词从一个新的段落开始?或者还有什么我可以做的吗?

【问题讨论】:

  • 这个问题的值为 -1,所以我投了赞成票,因为我看不出这个问题有什么问题,而投反对票的人忽略了解释他/她对此有什么问题。

标签: php paragraph


【解决方案1】:

为什么不直接替换你的线索词?

$string = str_ireplace(array('hello', 'nick'), array('<strong>hello</strong>', '<strong>nick</strong>'), $string);

(当然传递给函数的第二个数组会预先生成)

【讨论】:

  • @ Lepidosteus 我认为这样我将不得不再次将 $string 拆分为单词,并且段落的概念将不存在。如果我错了,请纠正我
  • 不,Lepidosteus 的代码应该可以工作 - 试一试 :)
【解决方案2】:

使用str_replace并将单词周围的粗体标签替换

【讨论】:

  • 嗨,斯特拉顿,感谢您的回答。你能举个例子更准确吗,因为我不太明白我怎么能做到这一点?
  • 看看@Lepidosteus 的回答
【解决方案3】:

只需将单词替换为自身的格式化版本即可。下面的正则表达式保持大小写并仅替换完整的单词(例如,在单词“snicker”中,其中的单词“nick”不会被替换)。

preg_replace( '/\b('.implode( '|', $array ).')\b/i', '<em>$1</em>', $string );

【讨论】:

  • @Juhana 感谢您的回答。我不太明白那个正则表达式是什么意思,但我会尝试使用谷歌找到它:) 我只需要确认,函数的第一个参数是否以 i 结尾?如果是的话,我的意思是什么?另外,第二个参数中的 $1 是什么变量(如果它是变量)?
  • i 表示不区分大小写,因此它将替换所有变体:“hello”、“Hello”、“HELLO”等。 $1 不是变量,它代表找到的匹配项(如果找到“hello”,则 $1 代表“hello”)。
猜你喜欢
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 2020-04-18
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 2011-01-12
相关资源
最近更新 更多