我有一个页面需要从DB输出文本,这个文本有时会通过iframe嵌入一个或多个视频。我需要输出这个,这样视频就会显示在文本的左边(通过css浮动)——尽管这需要将视频放在文本之前。
目前我有这个
$text = preg_replace("#(.*?)(<iframe.*?</iframe>)(.*?)#i", '$2 $1 $3', $text);
然而,这只会在多个iframe存在的情况下移动第一个,而将其他iframe留在原来的位置。
示例:
abcdefghijkl
<iframe....></iframe>
mnopqrstuvwxyz
<iframe....></iframe>
期望输出:
<iframe....></iframe>
<iframe....></iframe>
abcdefghijklmnopqrstuvwxyz
好吧,你可以使用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;