Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: кодировка в DOMDocument
Форумы портала PHP.SU » » Кодировки и все смежное » кодировка в DOMDocument

Страниц (1): [1]
 

1. DlTA - 09 Ноября, 2017 - 17:00:05 - перейти к сообщению
имеем код
PHP:
скопировать код в буфер обмена
  1.  
  2. // код страницы cp1251
  3. header('Content-Type: text/html; charset=UTF-8', true);
  4.  
  5. $oDom = new DOMDocument('1.0', 'utf-8');
  6. $textData = '<div>
  7. русский
  8. влякое при всякое
  9. </div>
  10. ';
  11.  
  12. $textData = iconv('CP1251', 'UTF-8', $textData);
  13.  
  14. $oDom->loadHTML($textData);
  15. $books = $oDom->getElementsByTagName('*');
  16. foreach ($books as $book) {
  17.         echo $book->nodeValue;
  18.         //echo iconv('ISO-8859-1', 'UTF-8', $book->nodeValue);
  19. }
  20.  

жостко указал код страницы, вроде также жостко указал DOMDocument('1.0', 'utf-8') и тут кодировку, и сам код вроде тоже $textData = iconv('CP1251', 'UTF-8', $textData); правильно указал.
но на выходе имеем текст
Спойлер (Отобразить)


до этого с сайта кодировок www.artlebedev.ru выходило, что возвращается в кодировке ISO-8859-1

на на моем денвере не получается по человечески перекодировать с ISO-8859-1
на выходе получаем
Спойлер (Отобразить)



в общем КАК РАБОТАТЬ С КОДИРОВКОЙ в DOMDocument??
2. Vladimir Kheifets - 09 Ноября, 2017 - 20:18:42 - перейти к сообщению
DlTA пишет:
имеем код
PHP:
скопировать код в буфер обмена
  1.  
  2. // код страницы cp1251
  3. header('Content-Type: text/html; charset=UTF-8', true);
  4.  
  5. $oDom = new DOMDocument('1.0', 'utf-8');
  6. $textData = '<div>
  7. русский
  8. влякое при всякое
  9. </div>
  10. ';
  11.  
  12. $textData = iconv('CP1251', 'UTF-8', $textData);
  13.  
  14. $oDom->loadHTML($textData);
  15. $books = $oDom->getElementsByTagName('*');
  16. foreach ($books as $book) {
  17.         echo $book->nodeValue;
  18.         //echo iconv('ISO-8859-1', 'UTF-8', $book->nodeValue);
  19. }
  20.  

жостко указал код страницы, вроде также жостко указал DOMDocument('1.0', 'utf-8') и тут кодировку, и сам код вроде тоже $textData = iconv('CP1251', 'UTF-8', $textData); правильно указал.
но на выходе имеем текст
Спойлер (Отобразить)


до этого с сайта кодировок www.artlebedev.ru выходило, что возвращается в кодировке ISO-8859-1

на на моем денвере не получается по человечески перекодировать с ISO-8859-1
на выходе получаем
Спойлер (Отобразить)



в общем КАК РАБОТАТЬ С КОДИРОВКОЙ в DOMDocument??


Добрый вечер!
Мне кажется, что проблема не с кодировкой DOMDocument.
У Вас кодировка страницы UTF-8. На ней
$textData = '<div>
русский
влякое при всякое
</div>

$textData в кодировке страницы т.е. в UTF-8
В $textData = iconv('CP1251', 'UTF-8', $textData) указана входная кодировка CP1251 выходная UTF-8 Не ошибка ли это?
Удачи!
3. DlTA - 10 Ноября, 2017 - 12:06:29 - перейти к сообщению
Vladimir Kheifets пишет:
В $textData = iconv('CP1251', 'UTF-8', $textData) указана входная кодировка CP1251 выходная UTF-8 Не ошибка ли это?


вроде нет, проблема не в том как выводить, а в том что я не могу получить понятный текст.
то что я получаю нельзя преобразовать что то понятное
4. Vladimir Kheifets - 11 Ноября, 2017 - 08:00:54 - перейти к сообщению
DlTA пишет:
Vladimir Kheifets пишет:
В $textData = iconv('CP1251', 'UTF-8', $textData) указана входная кодировка CP1251 выходная UTF-8 Не ошибка ли это?


вроде нет, проблема не в том как выводить, а в том что я не могу получить понятный текст.
то что я получаю нельзя преобразовать что то понятное

Доброе утро!
Советую Вам убрать и iconv и добавить <?xml encoding="utf-8"?>
см. код и результат:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // код страницы cp1251
  3. header('Content-Type: text/html; charset=UTF-8', true);
  4. $oDom = new DOMDocument();
  5. $textData = '<div>
  6. русский
  7. влякое при всякое
  8. </div>
  9. ';
  10. echo "<pre><b>textData перед iconv:</b>". $textData."</pre>";
  11. $textDataIconv = iconv('CP1251', 'UTF-8', $textData);
  12. echo "<pre><b>textData после iconv:</b>". $textDataIconv."</pre>";
  13.  
  14. echo "<pre><b>textData после Dom:</b>";
  15. $oDom->loadHTML('<?xml encoding="utf-8"?>'.$textData);
  16. $books = $oDom->getElementsByTagName('*');
  17. foreach ($books as $book) {
  18.         echo $book->nodeValue."</pre>";
  19.         //echo iconv('ISO-8859-1', 'UTF-8', $book->nodeValue);
  20. }
  21. echo "</pre>";
  22. ?>


textData перед iconv:
русский
влякое при всякое

textData после iconv:
СЂСѓСЃСЃРєРёР№
влякое при всякое

textData после Dom:
русский
влякое при всякое

Удачи!
5. DlTA - 13 Ноября, 2017 - 10:33:25 - перейти к сообщению
ну, опупеть.

но решил чуток посмотреть и получил:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. header('Content-Type: text/html; charset=UTF-8', true);
  4. $dom = new domDocument('1.0', 'CP1251');
  5. // страничка в cp1251
  6. $dom->loadHTML('<?xml ?>'.iconv('CP1251', 'UTF-8', "<p>Германия, Великобритания и Франция</p>"));
  7. foreach($dom->getElementsByTagName('p') as $p_dom)
  8.         echo $p_dom->nodeValue;
  9. ?>
  10.  


и выдало все в UTF-8.
без <?xml ?> все выдает в кодировке ISO-8859-1

косячина...

 

Powered by ExBB FM 1.0 RC1