Как я могу заменять этикетки html

У меня есть документ HTML, с несколькими этикетками iframe с url youtube

<iframe allowfullscreen="" frameborder="0" height="315px" src="https://www.youtube.com/embed/xxxyyyxxx" width="560px"></iframe>

Используя PHP DOM: как я могу remplazarlas из-за

<figure>
   <iframe src="https://www.youtube.com/embed/xxxyyyxxx">
   </iframe>
</figure>

или, может быть, не заменять их, но добавлять перед iframe этикетка figure?

1
задан 18.01.2017, 04:35
0 ответов

Очень просто обрабатывать HTML с DOM, это программные средства, которые подумались для этого. Каждый из шагов прокомментирован в коде:

$html = '
         <body>
             <iframe allowfullscreen="" frameborder="0" height="315px" 
                     src="https://www.youtube.com/embed/xxxyyyxxx" width="560px">
             </iframe>
             <div><p>¡Acá más texto!</p></div>
             <iframe src="https://www.otro.com/iframe" width="333px"></iframe>
         </body>';

//Convertir utf8 a ISO-8859-1
$htmlISO = mb_convert_encoding($html, 'ISO-8859-1');


//Generar el DOM
$doc = new DOMDocument;
$opcionesLibXML = LIBXML_COMPACT | LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD;
$doc->loadHTML($htmlISO, $opcionesLibXML);


//Obtener todos los iframes
$iframes = $doc->getElementsByTagName('iframe');

//Reemplazar c/u
foreach ($iframes as $iframeViejo) {
    //Crear un nuevo iframe y asignar el src
    $iframeNuevo = $doc->createElement('iframe');
    $iframeNuevo->setAttribute('src', $iframeViejo->getAttribute('src'));

    //Crear un nuevo figure y agregarle el nuevo iframe
    $figureNuevo = $doc->createElement('figure');
    $figureNuevo->appendChild($iframeNuevo);

    //reemplazar viejo por nuevo
    $iframeViejo->parentNode->replaceChild($figureNuevo, $iframeViejo);
}


//DOM -> string final
$resultado = $doc->saveHTML($doc->documentElement);
             //documentElement :: importante para no recibir entities
echo $resultado;

Результат

<body>
    <figure><iframe src="https://www.youtube.com/embed/xxxyyyxxx"></iframe></figure>
    <div><p>¡Acá más texto!</p></div>
    <figure><iframe src="https://www.otro.com/iframe"></iframe></figure>
</body>

Demo

http://ideone.com/OfaNhF

4
ответ дан 03.12.2019, 17:38
  • 1
    спасибо за помощь, если он реализует функцию добавления этикетки, но на текст символы, у которых есть акцент, он меняет из-за & Поставите знак тильды; & пример: тогда qu& Поставите знак тильды; & copy; лучше, что делать ее t& Поставите знак тильды; & ordm; сама дома agrege кодирование encoding =" utf-8" в header, но они оказываются равными, ты мог бы помогать мне с этим пожалуйста –  18.01.2017, 18:30
  • 2
    @skycomputer2 Изданный, чтобы направлять utf8, и что не возвратил организации. –  18.01.2017, 22:52
  • 3
    большое спасибо из-за твоей помощи я sirvi, чтобы делать изменения, но сейчас случается, что, если у меня есть несколько этикеток, он меняет одну, если и другая не, не из-за того, что, я попробовал поместить это на странице, которую ты сделал demo, и там он только меняет первую: ideone.com/vcGsiI ты мог бы помогать мне с этим porfavor, большое спасибо –  19.01.2017, 21:19