DOM & HTML @ PHP 5.0.{2,3} broken?

xlex

Guest
DOM & HTML @ PHP 5.0.{2,3} broken?

Помогите, пожалуйста определиться - это я багу нашёл или просто руки не из того места растут?

Нижеприведённый код начисто ломает кодировку! Если заменить loadHTML на loadXML, то всё нормально (ну то есть кодировка остаётся в норме)... Получается, что loadHTML просто положить хотел на кодировки?

Не помогает и строка вида "$domDoc = new DOMDocument('1.0', 'utf-8');" (то есть явное указание кодировки).

Исходный файл _точно_ в utf-8, первая строка (<?xml...) нужна только для того, чтобы не менять входные данные (то есть для чистоты эксперимента).

Тестировалось на 5.0.2 & 5.0.3 версиях (Mac OS X 10.3 & FreeBSD 5.3).

Попробуйте, пожалуйста, у кого есть возможность. Или скажите, пожалуйста, как переставить руки, чтобы заработало...

Заранее спасибо.

Листинги:
=======

PHP:
<?php

$xmlContent = file_get_contents('input_test');

$domDoc = new DOMDocument();
$domDoc->formatOutput = true;
$domDoc->preserveWhiteSpace = false;
$domDoc->recover = true;
$domDoc->loadXML($xmlContent);
		
file_put_contents('output_test', $domDoc->saveXML());
?>

[input_test]
<?xml version="1.0" encoding="utf-8"?>
<html>
<head>
<title>Тест - Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
</html>
[/input_test]
 

slach

Новичок
1) включи error_reporting E_ALL
при LoadHTML объявление <?xml version?>
явно лишнее

Warning: DOMDocument::loadHTML(): htmlParseStartTag: invalid element name in Entity, line: 1 in C:\u
sr\local\apache\htdocs\test.xslt\domxml\charset.php5 on line 9

2) поставь МЕТА тег раньше чем <title> при парсинге

3) на снапшуте php5.1.0-dev у меня при этих двух условиях получается нормальный XML документ на выходе

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>тест - Test</title>
</head>
</html>
 

xlex

Guest
Спасибо за помощь.

XML лишнее - я знаю (я это написал). Оно там стоит, чтобы loadXML вызов прошёл удачно.

По сути - переставил мета тег раньше тайтла - заработало... Но ведь это же неправильно?
Если я правильно представляю, в случае встрече этого тега и его расхождении с внутреннней кодировкой, должна произойти корректировка и повторное чтение файла...
 

tony2001

TeaM PHPClub
1) я, кстати, не могу вопроизвести.
переставлял как угодно тэги - всё равно работает.

2) то, что это проблемы не PHP - определенно.
PHP ничего не парсит и не конвертит.
 

xlex

Guest
tony2001, а какая версия PHP? Какая операционная система? Какая версия libxml?

То что не проблемы PHP - понятно, это могут быть (глубоко теоретически) проблемы обвязки с libxml. Вот я и пытаюсь понять у кого работает, а у кого нет.
 

xlex

Guest
Хм, а у меня libxml2-2.6.13, PHP 5.0.3 (FreeBSD 5, Mac OS X). Надо будет посмотреть, может быть в библиотеке дело...
 
Сверху