1

私は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" />

どのようにできるのか?

4

3 に答える 3

3

「プレーン」テキストとして扱うのではなく、実際に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(); 
于 2010-03-28T12:05:02.547 に答える
1

ドキュメントを見て最初に言うことの1つは

「これで文字エンティティ(例:©)を使用していて、それらが自動的にエスケープされていることを確認する人への簡単なメモ。ここで行う正しいことは、createEntityReferenceメソッド(例:createEntityReference( "copy");)を使用してからappendChildを使用することです。テキストノード間のこのエンティティ。」

于 2010-03-28T12:12:11.777 に答える
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();
于 2010-03-28T03:31:44.267 に答える