我有一个需要从数据库输出文本的页面,此文本有时会通过iframe嵌入一个或多个视频。我需要输出这个,以便视频显示在文本的左侧(通过css浮动) - 虽然这需要将视频放在文本之前。
目前我有这个
$text = preg_replace("#(.*?)(<iframe.*?</iframe>)(.*?)#i", '$2 $1 $3', $text);
然而,如果存在多个iframe,则只会移动第一个iframe,而将其他iframe保留在原来的位置。
示例在:
abcdefghijkl
<iframe....></iframe>
mnopqrstuvwxyz
<iframe....></iframe>
Desired Out:
<iframe....></iframe>
<iframe....></iframe>
abcdefghijklmnopqrstuvwxyz
答案 0 :(得分:1)
你可以使用preg_replace_callback来做这样的事情,这是一个例子,但你将使用全局变量,这实际上是一个肮脏的解决方案:
$str = 'abcdefghijkl
<iframe....></iframe>
mnopqrstuvwxyz
<iframe....></iframe>';
global $myText;
global $myIframe;
preg_replace_callback("/([^<]+)(<iframe[^>]+>[^<]*<\/iframe>)/i",
function($matches) use ($myText) {
global $myText, $myIframe;
$myText .= $matches[1];
$myIframe .= $matches[2];
},
$str);
echo $myIframe."<br>".$myText;