Intereting Posts
403 с сообщением: доступ не настроен. Используйте Google Developers Console для активации API для своего проекта. Не удается разрешить метод getStringArrayList, когда я создаю фильтр поиска для Listview Преобразование URL-адреса в путь к файловой системе php parse_url reverse – проанализированный URL-адрес Сертификат для TCPDF TCPDF ERROR: Не удалось получить изображение Объединение перекрывающихся диапазонов в массивах PHP? Идентификатор Silex SecurityServiceProvider throws «security.authentication_providers» не определен. ' Как написать getter / setter для доступа к многоуровневому массиву по ключевым словам? Можно ли проверить, приведет ли imagecreatefromjpeg к тому, что память исчерпала фатальную ошибку, прежде чем запускать ее? Передача переменной PHP в bootstrap modal Codeigniter Session Данные недоступны на других страницах после входа в систему Flash-вызов функции PHP Содержимое ответа должно быть строкой или объектом, реализующим __toString (), \ "boolean \". Laravel и Dropbox WebAuth: «Отсутствует токен CSRF в сеансе»

Чтение файла DOC в php

Я пытаюсь прочитать .doc .docx файл в php. Все работает нормально. Но на последней строке я получаю ужасные персонажи. Пожалуйста, помогите мне. Вот код, разработанный кем-то.

  function parseWord($userDoc) { $fileHandle = fopen($userDoc, "r"); $line = @fread($fileHandle, filesize($userDoc)); $lines = explode(chr(0x0D),$line); $outtext = ""; foreach($lines as $thisline) { $pos = strpos($thisline, chr(0x00)); if (($pos !== FALSE)||(strlen($thisline)==0)) { } else { $outtext .= $thisline." "; } } $outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext); return $outtext; } $userDoc = "k.doc"; 

Вот скриншот. введите описание изображения здесь

Файлы DOC не являются обычным текстом .

Попробуйте библиотеку, такую ​​как PHPWord ( старый сайт CodePlex ).

nb: Этот ответ был обновлен несколько раз, поскольку PHPWord изменил хостинг и функциональность.

Вы можете читать .docx файлы на PHP, но вы не можете читать файлы .doc. Вот код для чтения файлов .docx:

 function read_file_docx($filename){ $striped_content = ''; $content = ''; if(!$filename || !file_exists($filename)) return false; $zip = zip_open($filename); if (!$zip || is_numeric($zip)) return false; while ($zip_entry = zip_read($zip)) { if (zip_entry_open($zip, $zip_entry) == FALSE) continue; if (zip_entry_name($zip_entry) != "word/document.xml") continue; $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); }// end while zip_close($zip); //echo $content; //echo "<hr>"; //file_put_contents('1.xml', $content); $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content); $content = str_replace('</w:r></w:p>', "\r\n", $content); $striped_content = strip_tags($content); return $striped_content; } $filename = "filepath";// or /var/www/html/file.docx $content = read_file_docx($filename); if($content !== false) { echo nl2br($content); } else { echo 'Couldn\'t the file. Please check that file.'; } 

Я использую эту функцию, которая работает хорошо для меня 🙂 попробуйте

 function read_doc_file($filename) { if(file_exists($filename)) { if(($fh = fopen($filename, 'r')) !== false ) { $headers = fread($fh, 0xA00); // 1 = (ord(n)*1) ; Document has from 0 to 255 characters $n1 = ( ord($headers[0x21C]) - 1 ); // 1 = ((ord(n)-8)*256) ; Document has from 256 to 63743 characters $n2 = ( ( ord($headers[0x21D]) - 8 ) * 256 ); // 1 = ((ord(n)*256)*256) ; Document has from 63744 to 16775423 characters $n3 = ( ( ord($headers[0x21E]) * 256 ) * 256 ); // 1 = (((ord(n)*256)*256)*256) ; Document has from 16775424 to 4294965504 characters $n4 = ( ( ( ord($headers[0x21F]) * 256 ) * 256 ) * 256 ); // Total length of text in the document $textLength = ($n1 + $n2 + $n3 + $n4); $extracted_plaintext = fread($fh, $textLength); // simple print character stream without new lines //echo $extracted_plaintext; // if you want to see your paragraphs in a new line, do this return nl2br($extracted_plaintext); // need more spacing after each paragraph use another nl2br } } } 

Я также использовал его, но для акцентов (и одиночных кавычек вроде ') он помещал бы вместо SOo мой PDO mySQL не понравился, но я, наконец, понял это, добавив

 mb_convert_encoding($extracted_plaintext,'UTF-8'); 

Поэтому окончательная версия должна гласить:

 function getRawWordText($filename) { if(file_exists($filename)) { if(($fh = fopen($filename, 'r')) !== false ) { $headers = fread($fh, 0xA00); $n1 = ( ord($headers[0x21C]) - 1 );// 1 = (ord(n)*1) ; Document has from 0 to 255 characters $n2 = ( ( ord($headers[0x21D]) - 8 ) * 256 );// 1 = ((ord(n)-8)*256) ; Document has from 256 to 63743 characters $n3 = ( ( ord($headers[0x21E]) * 256 ) * 256 );// 1 = ((ord(n)*256)*256) ; Document has from 63744 to 16775423 characters $n4 = ( ( ( ord($headers[0x21F]) * 256 ) * 256 ) * 256 );// 1 = (((ord(n)*256)*256)*256) ; Document has from 16775424 to 4294965504 characters $textLength = ($n1 + $n2 + $n3 + $n4);// Total length of text in the document $extracted_plaintext = fread($fh, $textLength); $extracted_plaintext = mb_convert_encoding($extracted_plaintext,'UTF-8'); // if you want to see your paragraphs in a new line, do this // return nl2br($extracted_plaintext); return ($extracted_plaintext); } else { return false; } } else { return false; } } 

Это отлично работает в базе данных utf8_general_ci mySQL, чтобы читать файлы doc-кода Word 🙂

Надеюсь, это поможет кому-то еще

Декодирование в чистом PHP никогда не работало для меня, поэтому вот мое решение: http://wvware.sourceforge.net/

Установить пакет

 sudo apt-get install wv 

Используйте его в PHP:

 $output = str_replace('.doc', '.txt', $filename); shell_exec('/usr/bin/wvText ' . $filename . ' ' . $output); $text = file_get_contents($output); # Convert to UTF-8 if needed if(!mb_detect_encoding($text, 'UTF-8', true)) { $text = utf8_encode($text); } unlink($output);