DOMDocument :: loadXML и HTML-объекты

В настоящее время у меня проблема с чтением в XHTML, поскольку синтаксический анализатор XML не распознает объекты символов HTML, поэтому:

<?php $text = <<<EOF <?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Entities are Causing Me Problems</title> </head> <body> <p>Copyright &copy; 2010 Some Bloke</p> </body> </html> EOF; $imp = new DOMImplementation (); $html5 = $imp->createDocumentType ('html', '', ''); $doc = $imp->createDocument ('http://www.w3.org/1999/xhtml', 'html', $html5); $doc->loadXML ($text); header ('Content-Type: application/xhtml+xml; charset: utf-8'); echo $doc->saveXML (); 

Результаты в:

Warning : DOMDocument::loadXML() [domdocument.loadxml]: Entity 'copy' not defined in Entity, line: 8 in testing.php on line 19

Как я могу это исправить, позволяя себе обслуживать страницы как XHTML5?

XHTML5 не имеет DTD, поэтому вы не можете использовать в нем старые имена HTML с именами, так как нет определения типа документа, чтобы сказать парсеру, что именованные объекты для этого языка. (За исключением предопределенных XML-сущностей &lt; &amp; , &quot; и &gt; … и &apos; &quot; &apos; , хотя вы, как правило, не хотите использовать это).

Вместо этого используйте цифровую ссылку на символ ( &#169; ) или, лучше, просто простой символ unencoded © (в UTF-8, не забудьте включить элемент <meta> для обозначения набора символов для парнеров, отличных от XML).

DOMDocument::loadHTML() попробуйте использовать DOMDocument::loadHTML() . Он не задыхается от несовершенной разметки.

Hy попробовать с помощью cdata

 $text = <<<EOF <?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Entities are Causing Me Problems</title> </head> <body> <![CDATA[<p>Copyright &copy; 2010 Some Bloke</p>]]> </body> </html> EOF; 

Вы не должны использовать loadXML и saveXML и добавлять вверху html-документа тег

 <?xml. 

Вместо этого используйте loadHTML и saveHTML и добавьте

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">