php dom заменяет первый элемент, второй - нет, а третий - место - PullRequest
0 голосов
/ 23 мая 2019

Я использую php dom для замены некоторых HTML-тегов, но я не знаю, почему не заменяются все элементы, только первый и третий,

это мой код:

          $valFieldBody ='<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod</p><div class="media_embed"><div height="" style="width:100%;height:0;padding-bottom:56%;position:relative;" width=""><iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="100%" src="https://giphy.com/embed/9GIiC03mgON4ZsZVdX" style="position:absolute" width="100%"/></div></div><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti necessitatibus</p><div class="media_embed"><div height="" style="width:100%;height:0;padding-bottom:56%;position:relative;" width=""><iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="100%" src="https://giphy.com/embed/V2V3Q1Yn1rpIs" style="position:absolute" width="100%"/></div></div><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p><div class="media_embed"><div height="" style="width:100%;height:0;padding-bottom:70%;position:relative;" width=""><iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="100%" src="https://giphy.com/embed/2yuS0kxvPq7FJxEYl1" style="position:absolute" width="100%"/></div></div>';
          $htmlEncoded = mb_convert_encoding($valFieldBody, 'HTML-ENTITIES', 'UTF-8');
          $doc = new DOMDocument;
          $opcionesLibXML = LIBXML_COMPACT | LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD;
          libxml_use_internal_errors(true);
          @$doc->loadHTML($htmlEncoded, $opcionesLibXML);
          libxml_use_internal_errors(false);
          $iframe_tag = $doc->getElementsByTagName('iframe');
          foreach ($iframe_tag as $key => $iframe_items){
                $src_iframe = $iframe_items->getAttribute("src");
                $imgNuevo = $doc->createElement('img');
                $imgNuevo->setAttribute('src', $src_iframe."embed");
                $iframe_items->parentNode->replaceChild($imgNuevo, $iframe_items);
          }
          $valFieldBody = $doc->saveHTML($doc->documentElement);

и вывод такой:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
<div class='media_embed'>
  <div height='' style='width:100%;height:0;padding-bottom:56%;position:relative;' width=''>
        <img src='https://giphy.com/embed/9GIiC03mgON4ZsZVdXembed'>
  </div>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti necessitatibus</p>
<div class='media_embed'>
    <div height='' style='width:100%;height:0;padding-bottom:56%;position:relative;' width=''>
        <iframe allowfullscreen='' class='giphy-embed' frameborder='0' height='100%' src='https://giphy.com/embed/V2V3Q1Yn1rpIs' style='position:absolute' width='100%'></iframe>
  </div>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
<div class='media_embed'>
    <div height='' style='width:100%;height:0;padding-bottom:70%;position:relative;' width=''>
        <img src='https://giphy.com/embed/2yuS0kxvPq7FJxEYl1embed'>
    </div>
</div>

не заменяет второй iframe, но я не знаю почему, не могли бы вы помочь мне?

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