Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с file_get_contents 
:(
    Опции темы
Sniper_super
Дата 17.1.2012, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



Здравствуйте!

Подключил библиотеку simple_html_dom.php для парсинга контента, файл запихнул в папку application\vendor\, создал action

Код

    public function action_index()
    {
        include Kohana::find_file( 'vendor', 'simple_html_dom' );

        $html = file_get_html( "http://lenta.ru/music/" );


где функция с файла simple_html_dom.php имеет следующее определение
Код

function file_get_html($url, $use_include_path = false, $context=null, 
$offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, 
$target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, 
$defaultBRText=DEFAULT_BR_TEXT)
{
    // We DO force the tags to be terminated.
    $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $defaultBRText);
    // For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done.

    $contents = file_get_contents($url, $use_include_path, $context, $offset);
    // Paperg - use our own mechanism for getting the contents as we want to control the timeout.
//    $contents = retrieve_url_contents($url);
    if (empty($contents))
    {
        return false;
    }
    // The second parameter can force the selectors to all be lowercase.
    $dom->load($contents, $lowercase, $stripRN);
    return $dom;
}


и проблема в том что после
$contents = file_get_contents($url, $use_include_path, $context, $offset);
в $contents все русские символы записываются как \ufffd - вроде проблема не с кодировкой, а какая то магическая лажа с внешним файлом, 
поскольку когда я добавляю в action_index код $temp = file_get_contents( "http://lenta.ru/music/" ); то все нормально работает, 
может кто то стыкался с подобной проблемой.

Это сообщение отредактировал(а) Sniper_super - 17.1.2012, 22:41
PM MAIL   Вверх
$дмитрий
Дата 18.1.2012, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 17
Всего: 45



Возможно проблема в том что на удаленной странице не указан meta charset, добавь сам
PM MAIL   Вверх
Sniper_super
Дата 18.1.2012, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



Мистика какая то.
Интиресно что это случается только с сайтом лента.ру
Код

    public function action_index()
    {

        $html = file_get_html( "http://lenta.ru/news/2012/01/18/sink/" );

        $links = $html->find( 'h2' );
        foreach( $links as $row )
        {
            echo $row->innertext;
            echo "<br>";
            echo mb_detect_encoding( $row->innertext );
            echo "<br>";
            echo mb_convert_encoding( $row->innertext, "windows-1251", "UTF-8" );
            echo "<br>";
            echo iconv( "KOI8-U", "windows-1251", $row->innertext );
            exit;
        }
    }


Как результат в браузере
Код

На "Коста Конкордиа" приостановлены спасательные работы
UTF-8
" "
мЮ "йНЯРЮ йНМЙНПДХЮ" ОПХНЯРЮМНБКЕМШ ЯОЮЯЮРЕКЭМШЕ ПЮАНРШ


Русский текст в строке 3 удалился - остались только кавычки
iconv - матюкается если вместо KOI8-U поставить UTF-8 - типа неопределенные символы хочу кодировать

Это сообщение отредактировал(а) Sniper_super - 18.1.2012, 15:32
PM MAIL   Вверх
krundetz
Дата 20.1.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Sniper_super, а страница отдаваемая браузеру у тубя в UTF-8? Если да то ничего удивительного, ты же пытаешься вывести текст в разных кодировках.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Sniper_super
Дата 23.1.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



krundetz, это понятно, но прикол в том, смотри строчку 3, она пустая, то есть остались только кавычки от названия
PM MAIL   Вверх
ksnk
Дата 23.1.2012, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Sniper_super @  23.1.2012,  16:45 Найти цитируемый пост)
krundetz, это понятно, но прикол в том, смотри строчку 3, она пустая, то есть остались только кавычки от названия 

В чем мистика-то? mb тебе честно декоднул кодировку и написал, что она UTF-8. После этого ты ее конвертируешь опять в UTF-8 из cp1251. Естественно процедура декодировки крутит у виска пальцем и выводит тебе пробелы...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sniper_super
Дата 23.1.2012, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



ksnk,  та нет, я кодирую с utf-8 в windows-1251 и получаю строку которая упустила все кириличиские символы, смотри http://docs.php.net/manual/en/function.mb-...rt-encoding.php
PM MAIL   Вверх
ksnk
Дата 23.1.2012, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Да, у них с iconv разный порядок параметров...
Ну тогда надо посмотреть на страничку в кодировке windows, может все в порядке, просто броузер порезал....
Еще вариант - поменять window-1251 на cp1251.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
gta4kv
Дата 23.1.2012, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



У меня вопрос немножко не в тему, зачем вы делаете:

Код

  include Kohana::find_file( 'vendor', 'simple_html_dom' );


Когда в Кохане работает автолоадер классов?
PM MAIL   Вверх
Sniper_super
Дата 23.1.2012, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



ksnk,  Спасибо за cp1251, заработало. Ура!

Сделал mb_convert_encoding( $row->innertext, "UTF-8", "cp1251" ), странно что mb_detect_encoding( $row->innertext ) пишет UTF-8.

Добавлено через 4 минуты и 41 секунду
gta4kv, я сторонний пхп инклудю, который содержит функцию file_get_html

З.Ы. С коханой недавно начал разбираться, пока нашел такой способ инклудить сторонний код.
PM MAIL   Вверх
gta4kv
Дата 23.1.2012, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Загляните в \system\classes\kohana\core.php

метод auto_load

smile

Добавлено @ 19:57
инклюдить руками ничего не надо, кохана сделает все сама 


upd
ах, у вас функция, а не класс, тогда я извиняюсь.

Это сообщение отредактировал(а) gta4kv - 23.1.2012, 21:26
PM MAIL   Вверх
krundetz
Дата 24.1.2012, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Sniper_super @  23.1.2012,  18:17 Найти цитируемый пост)
странно что mb_detect_encoding( $row->innertext ) пишет UTF-8.

ну автоматическое распознавание кодировки не тривиальная вещь сама по себе


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0870 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.