0

ちょっとした問題があります: <br>PHP DomDocument を送信するときに、タグなどのタグが解析されません。ここに私のPHPコードがあります:

$doc = new DOMDocument();
$doc->loadHTMLFile("Test.html");
$doc->formatOutput = true;
$node = new DOMElement('p', 'This is a test<br>This should be a new line in the same paragraph');
$doc->getElementsByTagName('body')->item(0)->appendChild($node);
$doc->saveHTMLFile("Test.html");
echo 'Editing successful.';

HTML コードは次のとおりです (編集前)。

<!DOCTYPE html>
<html>
    <head>
        <title>Hey</title>
    </head>
    <body>
        <p>Test</p>   
    </body>
</html>

(編集後)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hey</title>
</head>
<body>
    <p>Test</p>   
<p>This is a test&lt;br&gt;This should be a new line in the same paragraph</p>
</body>
</html>

なぜ機能しないのですか?

4

2 に答える 2

2

fragmentを追加しようとしていますが、これは「通常の」文字列として機能しません (エンコードしたいものとそうでないものをどうやって知るのでしょうか?)。

関数を使用できますDOMDocumentFragment::appendXML()が、名前が示すように、XMLではなくが必要HTMLです。そのため、 は自己終了する<br> 必要があります (XML モードで作業しているため)。

<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("Test.html");
$doc->formatOutput = true;
$node = new DOMElement('p');
$p =  $doc->lastChild->lastChild->appendChild($node);
$fragment = $doc->createDocumentFragment();
$fragment->appendXML('This is a test<br/>This should be a new line in the same paragraph');
$p->appendChild($fragment);
$doc->saveHTMLFile("Test.html");

文字列の変更を伴わない別の解決策は、別のドキュメントを HTML としてロードすることです (そのため、$otherdoc->loadHTML('<html><body>'.$yourstring.'</body></html>')、メイン ドキュメントにインポートしてループします。

<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("Test.html");
$doc->formatOutput = true;
$node = new DOMElement('p');
$p =  $doc->lastChild->lastChild->appendChild($node);
$otherdoc = new DOMDocument();
$yourstring = 'This is a test<br>This should be a new line in the same paragraph';
$otherdoc->loadHTML('<html><body>'.$yourstring.'</body></html>');
foreach($otherdoc->lastChild->lastChild->childNodes as $node){
    $importednode = $doc->importNode($node);
    $p->appendChild($importednode);
}
$doc->saveHTMLFile("Test.html");
于 2012-12-14T18:21:42.483 に答える
0

<br/>ではなく試しました<br>か?マークアップの有効性に関係している可能性があります。<br>無効です。

于 2012-12-14T18:14:03.263 に答える