使用TinyMCE发布内容时,正则表达式使用PHP在标记中移动图像

时间:2009-11-01 14:20:41

标签: php regex tinymce html-parsing

我正在使用TinyMCE将内容发布到我的网站。我有一个问题,我只能在另一个元素中插入一个图像,例如段落,即使我把光标放在内容的末尾。

因此,当我发布内容时,我目前最终得到的标记如下:

<p>Text content <img src="blah" /></p><p>Another paragraph</p>

我注意到WordPress和TinyMCE示例网站都以上述方式插入图像。

我无法找到如何在TinyMCE中插入任何其他元素之外的图像的解决方案,因此我的下一步是尝试更改内容服务器端,以便在发布我的内容时,我是能够在将标记保存到我的数据库之前更正标记,这样我最终会得到:

<p>Text content</p><img src="blah" /><p>Another paragraph</p>

是否有任何人知道我需要做些什么才能实现这一目标。我知道正则表达式应该可行,但我不确定是什么或如何使用它来达到这个效果。更好的是,如果有人能解决TinyMCE问题,那就更好了。

我知道显然我可以使用JS来实现这个客户端,但是这个解决方案并不理想。

非常感谢,

d

1 个答案:

答案 0 :(得分:2)

不要使用RegEx来操作HTML节点!它不是为它而设计的,而且太脆弱了。

HTML不是Regular语言,即使使用许多现代正则表达式实现支持的非常规功能,尝试使用正则表达式操作HTML仍然是困难的。


对于快速而肮脏的解决方案,您可以执行以下操作:

preg_replace
    ( "/(<img[^>]++>)\s*+(</p>)/gi"
    , "$2$1"
    , $HtmlText
    );


将失败与几个有效的HTML结构 - 您实际应该使用的是像PHP Simple HTML DOM Parser那样将HTML文本解析为HTML DOM,操作该DOM,然后作为文本输出试。