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?

6
задан Justin Johnson 14 February 2010 в 18:50
поделиться

4 ответа

XHTML5 не имеет DTD, поэтому вы не можете использовать в нем именованные сущности старой школы HTML, поскольку нет определения типа документа, чтобы сообщить синтаксический анализатор, что это за названные сущности для этого языка. (За исключением предопределенных объектов XML <, & , « и > ... и ', хотя обычно вы не хотите использовать это).

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

12
ответ дан 8 December 2019 в 17:21
поделиться

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

2
ответ дан 8 December 2019 в 17:21
поделиться

Вы не должны использовать 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">


​​
0
ответ дан 8 December 2019 в 17:21
поделиться

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;
0
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: