Приветствую! Уже месяц бьюсь с кодом для чтения текста из файлов разных форматов, сейчас получается доставать чистый текст только из pdf, txt, docx. Сейчас тормозит всю работу формат .doc своим файловым содержанием. Прогуглил сотни запросов и ни одно решение что дают в сети не помогло, есть такое решение:
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;
}
UPD: Код выше вообще неправильно скинул, но даже если в условие парсера пихнуть кириллицу, проблему в нём это не решит, так что в любом случае проблема не в этом, есть ещё один скрипт, вроде он более правильнее разбирает файл .doc, но всё также не поддерживает кириллицу. Почему я говорю правильнее, потому что код выше возвращает неверное количество символов и даже латинские символы неверные, а вот следующий код возвращает верное количество символов, даже абзацы сохраняет, но любые символы кроме латинских букв передаёт как квадратики.
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
}
}
}
Пробовал phpword, работает только с docx, который можно читать и кодом в 10 строк.
Но кириллицу оно не принимает, а мне нужна поддержка всех языков. Есть ли у кого нибудь решение или хотя бы совет как придти к нему, как получить вообще просто plain text из .doc файлов?