В настоящее время у меня проблема с чтением в 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 © 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-сущностей <
&
, "
и >
… и '
"
'
, хотя вы, как правило, не хотите использовать это).
Вместо этого используйте цифровую ссылку на символ ( ©
) или, лучше, просто простой символ 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 © 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">