【发布时间】:2011-06-28 14:19:08
【问题描述】:
我正在处理使用FCKeditor 生成的 HTML。所以它看起来像这样:
<p>Paragraph</p>
<ul>
<li>List item</li>
</ul>
没有head标签,没有body标签,只是HTML的sn-p。
我正在尝试添加对某些变量的支持,这些变量在插入 HTML 时将被动态内容替换。因此,插入的变量 HTML 可能如下所示:
<p>Here's a variable: {widget}</p>
我想用这个替换{widget}:
<div class="widget">Hi, I'm a widget.</div>
当您插入换行符时,FCKeditor 会(正确地)将内容封装到段落中。因此,如果我直接替换,生成的 HTML 将是这样的:
<p>Here's a variable: <div class="widget">Hi, I'm a widget.</div></p>
这是行不通的,因为div 标记在p 标记内部。所以我想要做的是关闭段落并在其后插入 DIV:
<p>Here's a variable: </p>
<div class="widget">Hi, I'm a widget.</div>
我们来看这个例子:
<p class="someclass">Here's a <strong>variable: {widget} more</strong> content
after</p>
我想要这个结果:
<p class="someclass">Here's a <strong>variable: </strong></p>
<div class="widget">Hi, I'm a widget.</div>
<p class="someclass"><strong> more</strong> content after</p>
在 HTML sn-p 中 {widget} 的每个实例中,我都需要在 HTML 中进行“中断”。即关闭每个打开的标签,插入小部件代码,然后按顺序再次打开它们。
这可以使用 PHP HTML 解析器吗?如果是这样,我会怎么做?
【问题讨论】:
-
这是一个很好的问题,我很想看看答案。抱歉,我无法提供任何帮助!
-
哇,这很难。 DOM 不会,regex won't,...
-
任何你使用 div 作为你的小部件内容的原因,如果你使用像 span 这样的内联元素,你会省去很多麻烦
-
@K Ivanov 小部件只是一个例子。会有许多不同类型的小部件。几乎所有这些都将包含块级元素。
-
@Jonah 感谢您提醒我funny regex link,但我永远不会指望正则表达式来解决这样的问题。
标签: php html dom replace html-parsing