Olası SimpleXMLElement düğümü HTML içerik eklemek için

3 Cevap php

Hey all, Simple question. Is it possible to add a block of HTML in a SimpleXMLElement (or as a matter of fact, DOMDocument) node without auto-converting the HTML data into entity format?

Örneğin, (burada DOMDocument ile, ama SimpleXMLElement tam olarak aynı şekilde davranır) bu pasajı almak:

<?php
$dom = new DOMDocument( '1.0', 'utf-8' );
$de = $dom->createElement( 'content', '<p>some <a>stuff</a></p>' );
$dom->appendChild( $de );
echo $dom->saveXML();
?>

Çıktısı:

<p>some <a>stuff</a></p>

Eğer kaynakta bir göz atacak olursak, görürsünüz:

<?xml version="1.0" encoding="utf-8"?>
<content>&lt;p&gt;some &lt;a&gt;stuff&lt;/a&gt;&lt;/p&gt;</content>

... HTML bloğu otomatik varlık biçimine dönüştürülür var.

CDATA açısal parantez çok dönüştürülür alır gibi hatta CDATA ile blok sarma, yardımcı olmuyor.

Yani, bu oto-dönüşüm yapmadan böyle HTML blokları eklemek için bir yolu var mı?

Thanks, m^e

3 Cevap

Sorun bir XML belge oluşturma ve SimpleXMLElement geçerli mark-up yaratmasıdır.

Orijinal HTML etiketleri geçerli XML değildir ve bu nedenle dışarı süzüldü.

Bir CDATA bölümü oluşturmak için, DOMDocument::createCDATASection deneyebilirsiniz

Aslında bu davranış oldukça aranıyor. Sen (content), yeni bir öğe oluşturun ve buna bir text node atayın. Metin XML özel karakterler içeriyorsa bunlar son serileştirme dönüştürülür.

Eğer bu davranışı istemiyorsanız, açıkça ilk etapta dize dışında eleman düğümleri oluşturmak zorunda. Eğer birlikte, örneğin, yapabilirim bu loadHTML. Sonra appendChild ile öğeleri ekleyin.

Ben php kılavuzu aracılığıyla sığ ise ben bir çözüm buldum inanıyorum.

DOMDocument zor bir şekilde de olsa, bunu başarmak yardımcı olacak CreateCDATASection adlı bir üye yöntemi vardır.

İşte bu yeni yöntemi kullanarak yukarıda yayınlanmıştır kod versiyonu:

<?php
$dom = new DOMDocument( '1.0', 'utf-8' );
$de = $dom->createElement( 'content' );
$dd = $dom->createCDataSection( '<p>some <a>stuff</a></p>' );
$de->appendChild( $dd );
$dom->appendChild( $de );
echo $dom->saveXML();
?>

Çıktı, arzu edilir ...

<?xml version="1.0" encoding="utf-8"?>
<content><![CDATA[<p>some <a>stuff</a></p>]]></content>

Bu haddeleme almak için benzer bir sorunla karşı karşıya herkes yardımcı olacaktır ...

Ek öneriler en açığız :)

Cheers, m^e