Php DOMDocument Htmlentities проблема - PullRequest
1 голос
/ 28 марта 2010

Я использую DOMDocument. Мой код здесь.

$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 ]

3 голосов
/ 28 марта 2010

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

$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 голос
/ 28 марта 2010

посмотрите на документацию одна из первых вещей говорит:

"Быстрое примечание для всех, кто использует в этом символьные сущности (например, & copy;) и находит их автоматически экранированными. Правильнее всего здесь использовать метод createEntityReference (например, createEntityReference (" copy ");) , а затем добавьте эту сущность между текстовыми узлами. "

1 голос
/ 28 марта 2010

Изменить createTextNode с createElement. Текстовые узлы предназначены для text :)

$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();
...