我正在研究PHP,我刚刚开始,所以我想就一些我似乎无法在网上找到的东西提出一些建议。
我有一个PHP文件,它有两个字符串:一个名字和很多HTML文本。
$name = $_POST['name'];
$content = $_POST['content'];
现在我想使用这些2创建一个新的HTML文件并保存。到目前为止,我已设法保存新的HTML文件,并将名称用作<title>
标记。现在我要做的是用我的HTML字符串替换(当前为空) body ,解释为HTML。
这构建了我的身体标签:
$body = $doc->createElement('body');
$body = $root->appendChild($body);
现在我发现了两种方法,但都不起作用:
解决方案1:
$content = $doc->createTextNode($content);
$content = $body->appendChild($content);
这会将我的HTML插入到我的身体中,但它会按字面意思解析为'<div id="lala">content</div>'
。所以这不是我想要的。
解决方案2:
$content = $doc->loadHTML($content);
这实际上使得html加载为HTML,但现在它取代了我的整个HTML,诸如向头部添加css和js之类的东西现在实际上将在新主体之下,而不是在头部。就这样:
$link_1 = $doc->createElement('link');
$link_1->setAttribute('rel','stylesheet');
$link_1->setAttribute('href','css/mystylesheet.min.css');
$link_1 = $head->appendChild($link_1);
所以基本上我想将我的字符串解释为HTML,并将其加载到正确的位置。我试图将其更改为$ body-&gt; loadHTML($ content),但这会给我一个内部错误。
有谁知道我正在寻找的PHP方法?谢谢!
答案 0 :(得分:4)
这会奏效。如果您需要解释,请告诉我:)。
<?php
ini_set( 'display_errors', 1 );
ini_set( 'error_reporting', E_ALL );
$dom = new DOMDocument( '1.0' );
$dom->formatOutput = true;
$dom->preserveWhiteSpace = true;
// test values
$name = 'Test';
$content = '<div onclick="alert(\'Hello!\');">Test div</div>';
// create <html>, <head>, <title> and <body> tags
$html = $dom->createElement( 'html' );
$head = $dom->createElement( 'head' );
$title = $dom->createElement( 'title' );
$body = $dom->createElement( 'body' );
// title text
$titleText = $dom->createTextNode( $name );
// import the text in a new dom
$dom1 = new DOMDocument( '1.0' );
$dom1->formatOutput = true;
$dom1->preserveWhiteSpace = true;
$bodyText = $dom1->loadHTML( $content );
$bodyText = $dom1->getElementsByTagName('body')->item(0);
// add them to the dom
$html = $dom->appendChild( $html );
$html->appendChild( $head );
$head->appendChild( $title );
$title->appendChild( $titleText );
$html->appendChild( $body );
$bodyT = $dom->importNode( $bodyText, true );
$body->appendChild( $bodyT );
echo $dom->saveHTML();
?>
希望这有帮助。
答案 1 :(得分:0)
当然,createTextNode
中的文字代表纯文本(与HTML相对)。
致命错误:调用未定义的方法
DOMElement::loadHTML()
正确,loadHTML()
belongs to DOMDocument
,而非DOMElement
。在您的情况下,文档显然是$doc
(不是$body
)。所以你需要打电话:
$doc->loadHTML()