Вывод текста в файл

Renfry

Новичок
Здравствуйте!
У меня проблема в следующем коде

PHP:
$varDoc = doc2text("1.doc");//возвращает текст
$varDoc = iconv("utf-8", "windows-1251",  $varDoc);//пытаюсь перекодировать
echo $varDoc;//вывожу на экран - русские буквы 

echo mb_detect_encoding($varDoc)."<br>"."<br>";

$open_file=fopen('temp.txt','w');
fwrite($open_file,  $varDoc);
fclose($open_file);
в браузере отображается нормальный русский текст по выводу echo $varDoc;
но в файл записываеются видимо коды букв в виде
"&#x0421;&#x041f;&#x0418;&#x0421;&#x041e;&#x041a;..........."

Как это исправить? где проблема в кодировке?
 

Renfry

Новичок
делала просто fwrite($open_file, html_entity_decode($varDoc)); - выводит точно также коды

а fwrite($open_file, html_entity_decode($varDoc, ENT_HTML5, "UTF-8")); - вообще ничего не выводит (((
 

fixxxer

К.О.
Партнер клуба
для начала надо понять на каком этапе взялись &#x...


в браузере отображается нормальный русский текст по выводу echo $varDoc;
надо не в браузер смотреть а в view source
 

Renfry

Новичок
в исходном коде страницы у меня такиеже коды букв, видимо браузер сам их интерпретирует.

а сам текст у меня формируется в функции doc2text в коде:

PHP:
        for ($i = 0; $i < count($pcd); $i++) { 
            // Получаем слово со смещением и флагом компрессии 
            $fcValue = $this->getLong(2, $pcd[$i]); 
            // Смотрим - что перед нами ANSI или Unicode 
            $isANSI = ($fcValue & 0x40000000) == 0x40000000; 
            // Остальное без макушки идёт на смещение 
            $fc = $fcValue & 0x3FFFFFFF; 

            // Получаем длину кусочка текста 
            $lcb = $cp[$i + 1] - $cp[$i]; 
            // Если перед нами Unicode, то мы должны прочитать в два раза больше файлов 
            if (!$isANSI) 
                $lcb *= 2; 
            // Если ANSI, то начать в два раза раньше. 
            else 
                $fc /= 2; 

            // Читаем кусок с учётом смещения и размера из WordDocument-потока 
            $part = substr($wdStream, $fc, $lcb); 
            // Если перед нами Unicode, то преобразовываем его в нормальное состояние 
            if (!$isANSI) 
                $part = $this->unicode_to_utf8($part); 

            // Добавляем кусочек к общему тексту 
            $text .= $part; 
        }
 

Renfry

Новичок
когда я применяю echo mb_detect_encoding($varDoc); сразу после возврата текста из функции то он вообще ничего не выдает и это тоже наверное странно
 

workOnFood

Новичок
в исходном коде страницы у меня такиеже коды букв, видимо браузер сам их интерпретирует.

а сам текст у меня формируется в функции doc2text в коде:

PHP:
        for ($i = 0; $i < count($pcd); $i++) { 
            // Получаем слово со смещением и флагом компрессии 
            $fcValue = $this->getLong(2, $pcd[$i]); 
            // Смотрим - что перед нами ANSI или Unicode 
            $isANSI = ($fcValue & 0x40000000) == 0x40000000; 
            // Остальное без макушки идёт на смещение 
            $fc = $fcValue & 0x3FFFFFFF; 

            // Получаем длину кусочка текста 
            $lcb = $cp[$i + 1] - $cp[$i]; 
            // Если перед нами Unicode, то мы должны прочитать в два раза больше файлов 
            if (!$isANSI) 
                $lcb *= 2; 
            // Если ANSI, то начать в два раза раньше. 
            else 
                $fc /= 2; 

            // Читаем кусок с учётом смещения и размера из WordDocument-потока 
            $part = substr($wdStream, $fc, $lcb); 
            // Если перед нами Unicode, то преобразовываем его в нормальное состояние 
            if (!$isANSI) 
                $part = $this->unicode_to_utf8($part); 

            // Добавляем кусочек к общему тексту 
            $text .= $part; 
        }
Это не функция, а кусок метода класса судя по виду.

// Если перед нами Unicode, то мы должны прочитать в два раза больше файлов
- сами писали?)

когда я применяю echo mb_detect_encoding($varDoc); сразу после возврата текста из функции то он вообще ничего не выдает и это тоже наверное странно
В какой кодировке doc файл? Хотя вообще вряд-ли тут дело в кодировке...

Самый православный вариант предложил fixxxer, нужно найти источник проблемы.
 

Renfry

Новичок
я не думаю, что дело в функции. просто если рассматривать строку как просто строку с юникод символами, то почему они отображаются браузером верно, но не могут перекодироваться стандартными функциями php в windows-1251 и вывестись в файл?

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

workOnFood

Новичок
PHP:
echo html_entity_decode('&#x0421;&#x041f;&#x0418;&#x0421;&#x041e;&#x041a;', ENT_COMPAT, 'UTF-8');
У меня работает прекрасно.

ps выяснять кто что написал помоему очень мелочно и оскорбительно, не все любят умирать за компом неделями
Да нет не мелочно и не оскорбительно) Но дело даже не в этом, мне вобщем-то все равно кто это написал, просто комментарий смешной на мой взгляд.
 

Renfry

Новичок
спасибо!!!!!!! я не знала что нужно использовать ENT_COMPAT. теперь все вывел в файл русскими буквами =)
 
Сверху