PHP:在div中只包装一次iframe

PHP:在div中只包装一次iframe,php,html,iframe,str-replace,Php,Html,Iframe,Str Replace,我只是注意到,我的代码中处理用户故事发布的一部分没有按应有的方式运行 每当用户的帖子中有一个iframe(例如YouTube嵌入视频),我的PHP脚本就会像下面这样将iframe包装在一个div中 我使用的代码很简单: $content = str_replace(['<iframe', '</iframe>'], ['<div class="embed-responsive embed-responsive-16by9"><iframe', '</if

我只是注意到,我的代码中处理用户故事发布的一部分没有按应有的方式运行

每当用户的帖子中有一个iframe(例如YouTube嵌入视频),我的PHP脚本就会像下面这样将iframe包装在一个div中

我使用的代码很简单:

$content = str_replace(['<iframe', '</iframe>'], ['<div class="embed-responsive embed-responsive-16by9"><iframe', '</iframe></div>'], $content);

$content=str_replace(['如果您使用以下方法规范化
$content
中的现有iframe,则无需检测帧是否已被包装:

    $content = str_replace(['<div class="embed-responsive embed-responsive-16by9"><iframe', '</iframe></div>'], ['<iframe', '</iframe>'], $content);

div
部分已再次添加到帧中,最终所有iframe只包装一次。

您可能需要检查iframe是否已经有父级。这可以通过在第一次替换时添加一个类来完成,然后在替换中使用该类作为条件

if(strpos($content,'class="i-wrapped" ')!== false ){
    //the iframe has not been wrapped
    $content = str_replace(
        ['<iframe', '</iframe>'], 
        ['<div class="embed-responsive embed-responsive-16by9">'.
         '<iframe class="i-wrapped"', '</iframe></div>'],
        $content);
}else { /*already wrapped*/}
if(strpos($content,'class=“i-wrapped”')!==false){
//iframe尚未包装
$content=str\u replace(

['检查内容是否以
开头。如果不是,请添加包装器。但是$content是整个文章内容,因此在iframe前后都有标记和文本。如何测试该字符串中iframe前面是否有div?请对照如下正则表达式进行检查:/
    $content = str_replace(['<iframe', '</iframe>'], ['<div class="embed-responsive embed-responsive-16by9"><iframe', '</iframe></div>'], $content);
if(strpos($content,'class="i-wrapped" ')!== false ){
    //the iframe has not been wrapped
    $content = str_replace(
        ['<iframe', '</iframe>'], 
        ['<div class="embed-responsive embed-responsive-16by9">'.
         '<iframe class="i-wrapped"', '</iframe></div>'],
        $content);
}else { /*already wrapped*/}