2015-05-12 5 views
2

Как я могу разобрать с PHP файл .doc «документ Microsoft Word 97-2004»?как разобрать файл Microsoft Word 97-2004 .doc с PHP

я могу разобрать "нормальные" файлы с расширением .doc

private function read_doc() { 
    $fileHandle = fopen($this->filename, "r"); 
    $line = @fread($fileHandle, filesize($this->filename)); 
    $lines = explode(chr(0x0D),$line); 
    $outtext = ""; 
    foreach($lines as $thisline) 
     { 
     $pos = strpos($thisline, chr(0x00)); 
     if (($pos !== FALSE)||(strlen($thisline)==0)) 
      { 
      } else { 
      $outtext .= $thisline." "; 
      } 
     } 
    //print_r($outtext);die(); 
    $outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\[email protected]\/\_\(\)]/","",$outtext); 
    return $outtext; 
} 

, но это не работает с Microsoft Word 97-2004 .doc файлов. Я просто хочу извлечь чистый текст. Ничего больше.

->Решение is PHPWord как Mark Baker рекомендует в своем комментарии.

+5

Взгляните на библиотеку, например [PHPWord] (https://github.com/PHPOffice/PHPWord), которая может читать файлы формата .doc формата BIFF. –

+0

Mark, с PHPWord это работает как шарм. Спасибо – mart

+0

В конце мне пришлось установить catdoc -> я написал собственный ответ в этом сообщении – mart

ответ

1

В конце концов мне пришлось установить linux catdoc 0.94.2 для решения проблемы. PHPWord не смог правильно преобразовать все файлы в чистый формат .txt.

Так Heres решение для Linux (например Unbuntu) пользователи: В командной строке установить catdoc

sudo apt-get install catdoc 

Если вы на Windows Server, посмотрите на это. Он также работал для меня:

http://blog.brush.co.nz/2009/09/catdoc-windows/

Затем в PHP код вы можете назвать это так (для Linux вызовов):

$escapeFile = escapeshellarg($data['tmp_name']); 
$command = "catdoc $escapeFile"; 
$output = array(); 
exec($command,$output); 
$text = implode("\n",$output); 

, то вы можете сделать, например

$text = strip_tags($text); 
$text = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $text); 
echo nl2br($text) ; 

чтобы увидеть результат на экране.

Это то, что для меня работает до сих пор. Если у кого-то есть лучшее решение, сообщите мне.

Смежные вопросы