2015-09-23 61 views
1

我有一個PHP文件用於生成HTML文件。這是這個過程:如何將PHP字符串讀取爲HTML

$document = new DomDocument; 
$document->preserveWhiteSpace = false; 
$document->validateOnParse = true; 
$document->loadHTML(file_get_contents("http://www.example.com/base.html")); 

$testNode = $document->createElement("div", "This is a <br> test"); 
$document->appendChild($testNode); 

$document->saveHTMLFile("output.html"); 

該吐出包含以下元素的HTML文件:

<div>This is a &lt;br&gt; test</div> 

也就是說,<br>標記獲取實際的HTML轉換爲&lt;br&gt;。我已經嘗試了所有的這些方法來取消轉義的字符串:

htmlspecialchars("This is a <br> test"); 

rawurldecode("This is a <br> test"); 

urldecode("This is a <br> test"); 

function decodeashtml($str) { 
$str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str)); 
return html_entity_decode($str,null,'UTF-8');; 
} 
decodeashtml("This is a <br> test"); 

,但他們所有的產品:

This is a &lt;br&gt; test

還有什麼能做些什麼來讓HTML標記來正確顯示爲HTML?

+0

你可以'str_replace'呢?創建一個你需要的所有值的數組。與bbcode相同的原理 –

+0

'$ document'對象是什麼? – Inurosen

+0

@啓動'$ document = new DomDocument;' –

回答

1

所以我發現正是我在尋找:

$document = new DomDocument; 
$document->preserveWhiteSpace = false; 
$document->validateOnParse = true; 
$document->loadHTML(file_get_contents("http://www.example.com/base.html")); 

$newDiv = $document->createElement("div"); 
$fragment = $document->createDocumentFragment(); 
$fragment->appendXML("<p>I can write<br/>my HTML here.</p>"); 
$newDiv->appendChild($fragment); 

$document->appendChild($newDiv); 

$document->saveHTMLFile("output.html"); 
1

你可以試試這個:

<?php echo html_entity_decode("this is <br> test."); ?> 
+0

因爲我不想直接在頁面上輸出文本,而是想將它存儲在一個變量中,我不認爲我可以使用'echo'。 –

+0

所以你也可以將它存儲在一個php變量中,並且只要你想使用,那麼你就可以。 – sumitjainjr

1

<p>This is a <br /> test</p>是包含一個文本節點,br元素,另一個文本節點的p元素。

要使用PHP的XML作家正確做到這一點:

$element = $document->createElement('p'); 

$element->appendChild($document->createTextNode('This is a ')); 
$element->appendChild($document->createElement('br')); 
$element->appendChild($document->createTextNode(' test')); 

$document->appendChild($element); 
+0

這工作,謝謝。這比我希望的更詳細一些(我希望能夠使用HEREDOC來處理多行HTML文本),所以在我接受這個作爲正確答案之前,我想檢查是否有辦法做到這一點代替。 –

相關問題