Как создать структуру HTML-тегов на PHP - PullRequest
0 голосов
/ 14 февраля 2019

Я должен создать эту HTML-структуру:

<figure class="op-interactive">
    <iframe>
        <div>
            <script async="" height="" src="src" width=""></script>
        </div>
    </iframe>
</figure>

, и это мой код:

$media_embed = $doc->getElementsByTagName('div');
foreach ($media_embed as $media){
    $scriptstag = $media->getElementsByTagName('script');                           
    foreach ($scriptstag as $scripts) {
        $src= $scripts->getAttribute('src');
        $newFigure = $doc->createElement('figure');
        $newFigure->setAttribute('class','op-interactive');

        $newiFrame = $doc->createElement('iframe');
        $newFigure->appendChild($newiFrame);

        $newDiv = $doc->createElement('div');
        $newiFrame->appendChild($newDiv);                                   

        $scripts->parentNode->insertBefore($newFigure, $scripts);
        $newiFrame->appendChild($scripts);
    }
}
$body1 = $doc->saveHTML($doc->documentElement);

Но вывод таков:

<figure class="op-interactive">
    <iframe>
        <div>
        </div>
        <script async="" height="" src="src" width=""></script>
    </iframe>
</figure>

Я не знаю, как вставить тег script между тегом div, что-то не хватает в моем коде?Я использую эту страницу, чтобы поделиться своим тестом: http://sandbox.onlinephpfunctions.com/code/00c285949a467fe44d4a5ce2ed002e6b0ef670a6

Не могли бы вы мне помочь?спасибо

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Я нашел способ сделать это:

$body1='<div class="media_embed"><script async="" height="" src="src"></script></div>';
$htmlEncoded = mb_convert_encoding($body1, 'HTML-ENTITIES', 'UTF-8');
$doc = new DOMDocument;
$opcionesLibXML = LIBXML_COMPACT | LIBXML_HTML_NODEFDTD;
@$doc->loadHTML($htmlEncoded, $opcionesLibXML);
$media_embed = $doc->getElementsByTagName('div');
foreach ($media_embed as $media){
    $scriptstag = $media->getElementsByTagName('script');
    foreach ($scriptstag as $scripts) {
        $iframe = $doc->createElement('iframe');
        $div = $doc->createElement('div');
        $newScript = $doc->createElement('newscript');
        $newScript->setAttribute('src', $scripts->getAttribute('src'));
        $figure = $doc->createElement('figure');
        $figure->setAttribute('class','op-interactive');
        $figure->appendChild($iframe);
        $iframe->appendChild($div);
        $div->appendChild($newScript);
        $scripts->parentNode->replaceChild($figure, $scripts);

    }
}
$body1 = $doc->saveHTML($doc->documentElement);
$body1 = str_replace('<newscript', '<script', $body1);
$body1 = str_replace('</newscript>', '</script>', $body1);
echo $body1;

, но я не знаю, почему, если вы используете:

$newScript = $doc->createElement('newscript');

я получаю эту ошибку:

Fatal error:  Maximum execution time of 3 seconds exceeded

, чтопочему я использую newscript и затем заменяю эти теги

http://sandbox.onlinephpfunctions.com/code/e0c42f2b9823bf41e92267af89b770848682215a

0 голосов
/ 14 февраля 2019

Вы добавляете свой скрипт в $newiFrame

Попробуйте добавить его в div: $newDiv->appendChild($scripts);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...