2010-08-30 76 views
0

所以我有下面的HTML代码:正则表达式替换FLV播放器在PHP的CKEditor的

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="movie" value="/uploads/flash/test1.flv" /><embed pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" src="/uploads/flash/test1.flv" type="application/x-shockwave-flash"></embed></object> 

什么我希望做的是提取帕拉姆名电影的价值,即它全部和只保留“uploads/flash/test1.flv”(Sans引号)。 HTML将被存储在var中。变量内可能有多个对象。我需要用新的对象类型来替换它们。

对于这个问题的上下文,我们使用的是允许上传flsah文件等到所见即所得的编辑器的CK编辑器。问题在于播放FLV需要FLV播放器。我们现在使用Flowplayer,但要使用它,我们需要替换CKEditors的默认FLV代码。我们希望在将代码发送给用户之前,将它在php端呈现的代码替换掉,而不是在CKEditor中进行修改。

如果任何人有CKEditor的知识或简单的解决方案,请随意扔在那里:)

+2

请勿使用正则表达式。使用DOM解析器。 – 2010-08-30 18:30:47

+0

您可以举一个例子,说明替换后html应该是什么样子? – Max 2010-08-31 05:31:56

+0

@皮卡请张贴这个答案,它是我甚至没有想过的完美解决方案。 – CogitoErgoSum 2010-08-31 13:45:49

回答

2

请勿使用正则表达式。使用像PHP一样的DOM解析器built in one.

$dom = new DOMDocument; 
$dom->loadHTML(your HTML code here); 
$allElements = $dom->getElementsByTagName('object'); 

foreach ($allElements as $element) 
// ... do something with each `object` tag ... 
0

这将是一个非常基本的,但工作正则表达式:

/src="([^"]+.flv)"/i 

编辑:每评论如下:

/<param\s+name="movie"\s+value="([^"]+.flv)"/i 
+0

不错的尝试,但可能有多个src的不是所有这些都将是HTML中的对象标记。 – CogitoErgoSum 2010-08-31 13:46:20