DOMDocument & encoding

igortik

Новичок
PHP: 5.3.2

PHP:
$dom = new DOMDocument();
$dom->encoding = 'utf-8';
$dom->validateOnParse = true;
@$dom->loadHTML($html); // Глушим ошибки, разметка не идеальна :/
// $html содержит сроку в формате UTF-8
На выходе при
PHP:
$dom->getElementById('myId')->nodeValue;
получаю "кракозябли" (мало того, что кириллических символов не вижу, так еще и html-разметки нет, вижу только слова явно написанные латиницей).

Что не так? :)

P.S. :)
У�Т У�ТЕУ�ТЗУ�Т�У�ТЛУ�Т�У�Т�У�ТАУ�Т�У�Т� У�ТПУ�ТОУ�ТИУ�Т�У�ТКУ�ТА У�Т�У�ТИУ�ТЕУ�ТВ
 

igortik

Новичок
Также убивает вот это:

PHP:
$html = '<html><body><div id="main"><span class="content"></span></div></body></html>';
$dom = new DOMDocument();
$dom->validateOnParse = true;
$dom->loadHTML($html);
var_dump($dom->getElementById('main')->nodeValue);
Ответ: Notice: Trying to get property of non-object ...

P.S. Если использую
PHP:
 $dom->loadHTMLFile('myfile.html');
то разбирает успешно, но с проблемой, о которой я упомянул в первом посте.

Сдуреть ...

P.P.S. Здесь разобрался, нужно было объявить в строке $html Doctype, например:
PHP:
$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ............................';
 

igortik

Новичок
Вижу, что проблема связана с явным отсутствием мета-тега в теле документа, объявляющего кодировку.
Но почему тогда
PHP:
$dom->encoding('myCodepage')
не работает ?
 

igortik

Новичок
В общем, по-моему, разобрался.. итак:

1. Чтобы была корректно определена кодировка документа на стадии выполнения
PHP:
$dom->loadHTMLFile('MyFile') или $dom->loadHTML($html)
необходимо:
- явно указать кодировку мета-тегом в самом документе, который загружается (<meta http-equiv="content-type" content="text/html; charset=UTF-8">)

2. Когда идет обращение с целью вывода содержимого
PHP:
var_dump($dom->getElementById('myElement')->nodeValue);
- необходимо передавать кодировку в скрипте, который вызывает этот метод, т.е.
PHP:
header('Content-Type: text/html; charset=utf-8');
Кстати, по неясным мне пока причинам $dom->getElementById('myElement')->nodeValue не возвращает содержимое, включая HTML разметку :/

3. Также, можно почитать, как один товарищ выкручивается из ситуации, когда нужно определить кодировку, но она явно не указана при загрузке контента http://ua2.php.net/manual/en/domdocument.loadhtml.php#91513

Всем спасибо за дискуссию.
 
Сверху