1

我有一个需要从数据库输出文本的页面,该文本有时会通过 iframe 嵌入一个或多个视频。我需要输出它,以便视频显示在文本的左侧(通过 css 浮动) - 尽管这需要将视频放在文本之前。

目前我有这个

$text = preg_replace("#(.*?)(<iframe.*?</iframe>)(.*?)#i", '$2 $1 $3', $text);

但是,这只会在存在多个 iframe 时移动第一个 iframe,而将其他 iframe 留在原处。

示例在:

abcdefghijkl
<iframe....></iframe>
mnopqrstuvwxyz
<iframe....></iframe>

期望输出:

<iframe....></iframe>
<iframe....></iframe>
abcdefghijklmnopqrstuvwxyz
4

1 回答 1

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;
于 2013-07-14T17:54:32.857 回答