2013-12-21 32 views
0

我有一個簡單的本地運行的應用程序,它可以讓用戶打開文件,重新排列其DOM元素,然後使用重新排列的元素生成一個新文件。問題是PHP DOMDocument正在打印轉義的HTML。我需要將由POST收到的#newfile的內容打印爲$content,作爲未轉義的HTML。如何使用PHP打印未轉義的HTML DOMDocument

POST功能如下:

$("#submit").click(function() { 
    var str = $('#newfile').html(); 
    $.post("generate.php", { content: str}); 
    }); 

的generate.php文件看起來是這樣的:

<?php 
$content = $_POST['content']; 

$doc = new DOMDocument('1.0'); 

$doc->formatOutput = true; 

$root = $doc->createElement('html'); 
$root = $doc->appendChild($root); 

$head = $doc->createElement('head'); 
$head = $root->appendChild($head); 

$body = $doc->createElement('body'); 
$body = $root->appendChild($body); 

$element = $doc->createElement('div', $content); 
$element = $body->appendChild($element); 

echo 'Wrote: ' . $doc->saveHTMLFile("output/test.html") . ' bytes'; 

?> 

輸出是當前一個格式良好的HTML文檔,但內容我需要被轉義:

<html> 
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head> 
<body><div> 
     &lt;div class="page"&gt; 
      &lt;h3&gt;1. Definition&lt;/h3&gt; 
      &lt;div id="definition" class="output ui-droppable"&gt; 
      &lt;/div&gt; 
     &lt;/div&gt; 
</div></body></html> 

如何將$ content作爲未轉義的HTML打印?

回答

0

html_entity_decode()與htmlentities()相反,它將字符串中的所有HTML實體轉換爲適用的字符。

<?php 
    $orig = "I'll \"walk\" the <b>dog</b> now"; 

    $a = htmlentities($orig); 

    $b = html_entity_decode($a); 

    echo $a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now 

    echo $b; // I'll "walk" the <b>dog</b> now 
    ?> 

價:http://www.php.net/html_entity_decode

+0

你可以建議如何使的$內容的價值被打印轉義納入DOM文檔呢?我已經用上面的構造試過了,它沒有區別 - 它仍然打印出來。 – Ila

0

我所使用的方法shown in this answer - createDocumentFragment + appendXML。我最後generate.php看起來是這樣的,和完美的作品:

<?php 
$content = $_POST['content']; 

$doc = new DOMDocument('1.0'); 
$doc->formatOutput = true; 

$root = $doc->createElement('html'); 
$root = $doc->appendChild($root); 

$head = $doc->createElement('head'); 
$head = $root->appendChild($head); 

$body = $doc->createElement('body'); 
$body = $root->appendChild($body); 

$f = $doc->createDocumentFragment(); 
$f->appendXML($content); 
$body->appendChild($f); 

echo 'Wrote: ' . $doc->saveHTMLFile("output/test.html") . ' bytes'; // Wrote: 129 bytes 

?>