2010-03-28 3 views
1

Я использую DOMDocument. Мой код здесь.Php DOMDocument Проблема с htmlentities

$dom = new DOMDocument('1.0', 'utf-8'); 
$textNode = $dom->createTextNode('<input type="text" name="lastName" />'); 
$dom->appendChild($textNode); 
echo $dom->saveHTML(); 

Выход:

&lt;input type="text" name="lastName" /&gt; 

Я хочу к этому выходу

<input type="text" name="lastName" /> 

Как я могу сделать?

ответ

3

Вам нужно что-то, что на самом деле анализирует данные XML вместо рассматривать его как «обычный» текст. DOMDocumentFragment и DOMDocumentFragment::appendXML() могут это сделать.
E.g.

$doc = new DOMDocument; 
$doc->loadhtml('<html><head><title>...</title></head> 
    <body> 
    <form method="post" action="lalala"> 
     <div id="formcontrols"> 
     </div> 
     <div> 
     <input type="submit" /> 
     </div> 
    </form> 
    </body> 
</html>'); 

// find the parent node of the new xml fragement 
$xpath = new DOMXPath($doc); 
$parent = $xpath->query('//div[@id="formcontrols"]'); 
// should test this first 
$parent = $parent->item(0); 

$fragment = $doc->createDocumentFragment(); 
$fragment->appendXML('<input type="text" name="lastName" />'); 
$parent->appendChild($fragment); 

echo $doc->savehtml(); 
1

createTextNodecreateElement. Текстовые узлы для текста :)

$dom = new DOMDocument('1.0', 'utf-8'); 
$textNode = $dom->createElement('input'); 
$textNode->setAttribute('type', 'text'); 
$textNode->setAttribute('name', 'lastName'); 
$dom->appendChild($textNode); 
echo $dom->saveHTML(); 
+0

Да, я знаю. Мой код - пример. Но я хочу добавить html-код в текстовый узел. –

+0

Итак? Я только что проверил код, и он выводит то, о чем вы просите. –

+0

Html-код является динамическим, поэтому мне нужно добавить текстовый узел. –

1

взгляд на documentation одна из первых вещей, которая говорит

«Быстрое примечание для тех, кто использует символьные сущности (например ©) в этом, и найти их автоматически экранируются. Правильность вещь здесь следует использовать метод createEntityReference (например, createEntityReference («copy»);), а затем appendChild этот объект между текстовыми узлами. »