2015-09-23 2 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> теги преобразуются в &lt;br&gt; в фактическом HTML. Я попробовал все эти методы для экранирования в строку:

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

@Inurosen '$ 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> является p элемент, содержащий текстовый узел, а br элемент и еще один текстовый узел.

Чтобы сделать это правильно с 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-текста), поэтому, прежде чем принять это как правильный ответ, я хочу проверить, есть ли способ сделать это вместо. –

Смежные вопросы