Добрый день. Маюсь несколько дней, не могу найти решение. Есть htm файл (http://darovanie.com/contact.htm), в нем указана кодировка '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />'. Необходимо получить ноду с id='text' (содержимое ноды и сам тэг с атрибутами) средствами php. Использую DOM и SimpleXml. В результате часть ноды имеет неверную кодировку. Создаю DOM Document: $doc = new DOMDocument(); $doc->loadHTMLFile(<имя файла>); Получаю ноду с id='text' : $textnode = $doc->getElementById('text'); Получаю содержимое ноды: $s = simplexml_import_dom($textnode); $utf = $s->asXML(); ( при выводе print_r($utf) и установке в браузере вручную кодировки UTF-8 видим в первых 3 строках ноды символы подобно 'Àäðåñ' , далее нормально русские буквы ) Конвертирую содержимое из кодировки UTF-8 в WINDOWS-1251: $text = iconv("UTF-8","WINDOWS-1251//IGNORE",$utf); В результате в первых 3 строках ноды(это таблица) не отображаются русские буквы. Дальше все нормально по-русски. Структура файла не указывает на ошибку. Отчего так? спасибо всем, кто откликнется.
поясню. нада получить кусок html из файла (http://darovanie.com/contact.htm): table с id='text' - тэг с атрибутами и все что внутри этой таблицы. средствами php. Использую это http://php.su/functions/?cat=dom и это http://php.su/functions/?cat=simplexml. спасибо за внимание.
Попробуйте перенести meta content-type выше, чем начинаются русские буквы - в данном случае выше title.
Lobankovanastia тоже проблема с кодировками. Если загружаю страницу в win-1251. Делал и так $html = iconv(«windows-1251», «utf-8», $html); и даже так $dom = new DOMDocument('1.0', 'windows-1251'); — ничего не получается, выдает иероглифы Расскажите как решили?
Помогите, никак не могу разобраться с кодировками в DOM. Кириллица выводится иероглифами PHP Version 5.2.9-2 Build Date Apr 9 2009 08:22:37 DOM/XML API Version 20031129 libxml Version 2.7.3
вот решение: Функция подготовки html-кода для работы с DOM — решает проблемы с кириллицей! PHP: <?php function prepareForDOM($html, $encoding) { $html = iconv($encoding, 'UTF-8//TRANSLIT', $html); $html = preg_replace('/<(script|style|noscript)\b[^>]*>.*?<\/\1\b[^>]*>/is', '', $html); $tidy = new tidy; $config = array( 'drop-font-tags' => true, 'drop-proprietary-attributes' => true, 'hide-comments' => true, 'indent' => true, 'logical-emphasis' => true, 'numeric-entities' => true, 'output-xhtml' => true, 'wrap' => 0 ); $tidy->parseString($html, $config, 'utf8'); $tidy->cleanRepair(); $html = $tidy->value; $html = preg_replace('#<meta[^>]+>#isu', '', $html); $html = preg_replace('#<head\b[^>]*>#isu', "<head>\r\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />", $html); return $html; }; $html = file_get_contents($url); $html = prepareForDOM($html, 'windows-1251'); $dom = new DOMDocument(); @$dom->loadHTML($html); // Ну и начинаем работать с DOM $nodes = $dom->getElementsByTagName('img'); ?>
А если установить локаль в UTF-8 ? У меня похожие проблемы были с fgetcsv() - пока локаль не установил - всё шло вкривь и вкось.
Black Raven спасибо. ты гений!!! хз как, но это помогло!!!! работает!!! я в восторге. счастье бесконечно.