Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Открыть .docx для чтения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Описание: Разархивировать и прочитать файл /word/document.xml
TheRealKos
Отправлено: 15 Апреля, 2014 - 16:03:08
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




Доброго времени суток. Нужно открыть .docx для чтения. Нашел, что сначала его нужно разархивировать и уже потом считывать файл /word/document.xml. Так же нашел на хабре небольшой скрипт, который это все делает. Но почему-то в результате вместо текста все равно "кракозябры".

PHP:
скопировать код в буфер обмена
  1.  
  2. $filename=$_FILES["filename"]["tmp_name"];
  3. function docx2text($filename) {
  4.     return getTextFromZippedXML($filename, "word/document.xml");
  5. }
  6. function getTextFromZippedXML($archiveFile, $contentFile) {
  7.     // Создаёт "реинкарнацию" zip-архива...
  8.     $zip = new ZipArchive;
  9.     // И пытаемся открыть переданный zip-файл
  10.     if ($zip->open($archiveFile)) {
  11.         // В случае успеха ищем в архиве файл с данными
  12.         if (($index = $zip->locateName($contentFile)) !== false) {
  13.             // Если находим, то читаем его в строку
  14.             $content = $zip->getFromIndex($index);
  15.             // Закрываем zip-архив, он нам больше не нужен
  16.             $zip->close();
  17.  
  18.             // После этого подгружаем все entity и по возможности include'ы других файлов
  19.             // Проглатываем ошибки и предупреждения
  20.             $xml = DOMDocument::loadXML($content, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
  21.             // После чего возвращаем данные без XML-тегов форматирования
  22.  
  23.             return strip_tags($xml->saveXML());
  24.         }
  25.         $zip->close();
  26.     }
  27.     // Если что-то пошло не так, возвращаем пустую строку
  28.     return "";
  29. }
  30. echo function docx2text($filename);
  31.  
 
 Top
peters
Отправлено: 15 Апреля, 2014 - 16:59:06
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Янв. 2014  


Помог: 7 раз(а)




У меня Ваш скрипт отлично работает
кракозябры - это с кодировкой проблемы
 
 Top
TheRealKos
Отправлено: 15 Апреля, 2014 - 17:12:26
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




peters пишет:
У меня Ваш скрипт отлично работает
кракозябры - это с кодировкой проблемы

Хм...пробовал и windows-1251 и utf-8, результат один
 
 Top
peters
Отправлено: 15 Апреля, 2014 - 18:40:22
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Янв. 2014  


Помог: 7 раз(а)




Конкретнее, КАК пробовал?
 
 Top
TheRealKos
Отправлено: 15 Апреля, 2014 - 19:08:10
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




Уже сделал, вместо последней строчки:
PHP:
скопировать код в буфер обмена
  1.  
  2. $open = iconv("UTF-8", "Windows-1251",  docx2text($filename));
  3. echo "<br>".$open."<br><br><br><br>";
  4.  


Теперь другой вопрос. Текст появится то появился, но без переносов строк. Огорчение Можно ли как то их восстановить?

(Отредактировано автором: 15 Апреля, 2014 - 19:22:08)

 
 Top
IllusionMH
Отправлено: 15 Апреля, 2014 - 19:21:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




TheRealKos, попробуйте nl2br если там есть символы переноса строк.
 
 Top
TheRealKos
Отправлено: 15 Апреля, 2014 - 19:27:09
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




IllusionMH пишет:
попробуйте nl2br если там есть символы переноса строк.

Попробовал, но безрезультатно
PHP:
скопировать код в буфер обмена
  1. $open = iconv("UTF-8", "Windows-1251",  docx2text($filename));
  2. $open_result=nl2br($open);
  3. echo "<br>".$open_result."<br><br><br><br>";

(Добавление)
Вот отрывок текста как должно быть (перенос строки):
...так и по произвольным текстовым запросам.
Задачи автоматически
...

А вот как выдает скрипт (без переноса):
...так и по произвольным текстовым запросам.Задачи автоматически...
 
 Top
IllusionMH
Отправлено: 15 Апреля, 2014 - 19:53:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




TheRealKos, какие символы идут после точки? в функции перед strip_tags попробуйте добавить переносы самостоятельно, в конце соответствующих тегов.
 
 Top
TheRealKos
Отправлено: 15 Апреля, 2014 - 19:58:17
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




IllusionMH пишет:
какие символы идут после точки? в функции перед strip_tags попробуйте добавить переносы самостоятельно, в конце соответствующих тегов.

В исходном тексте ни каких (я же загружаю docx и потом с помощью скрипта открываю /word/document.xml)
 
 Top
IllusionMH
Отправлено: 15 Апреля, 2014 - 20:05:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




TheRealKos, а как по вашему строки в документе разделяются?
В документе 1 строка и соержимое лежит в соответствующих тегах. Поэтому перед удалением этих тегов(у абзаца кажется </w:p>, а мягкий переноса строки <w:br/>) следует самостоятельно поставить символы переноса строки, а потом уже удалять теги.

(Отредактировано автором: 15 Апреля, 2014 - 20:07:19)

 
 Top
TheRealKos
Отправлено: 15 Апреля, 2014 - 20:13:38
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




IllusionMH пишет:
Поэтому перед удалением этих тегов(у абзаца кажется </w:p>, а мягкий переноса строки <w:br/>) следует самостоятельно поставить символы переноса строки, а потом уже удалять теги.

А как это реализовать?
 
 Top
IllusionMH
Отправлено: 15 Апреля, 2014 - 21:21:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




TheRealKos, заменой.
 
 Top
TheRealKos
Отправлено: 15 Апреля, 2014 - 21:29:44
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




IllusionMH пишет:
заменой.

Ну вот этой строкой удаляются все теги: return strip_tags($xml->saveXML()). И перед это строкой как то нужно заменить </w:p> и <w:br/> на <br />?
Хотя strip_tags и html теги удаляет...

(Отредактировано автором: 15 Апреля, 2014 - 21:32:15)

 
 Top
IllusionMH
Отправлено: 15 Апреля, 2014 - 21:34:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




TheRealKos, описаине функции внимательней почитайте ;) Там еще есть второй параметр.
 
 Top
TheRealKos
Отправлено: 15 Апреля, 2014 - 21:37:22
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




IllusionMH пишет:
описаине функции внимательней почитайте ;) Там еще есть второй параметр.

Точно, увидел). А как тогда правильно замену сделать?
А не будет ли тогда текст иметь такой вид:
...так и по произвольным текстовым запросам.<br />Задачи автоматически...
(Добавление)
Хотя nl2br должен сделать что-то такое...
...так и по произвольным текстовым запросам.<br />
Задачи автоматически...

(Отредактировано автором: 15 Апреля, 2014 - 21:39:15)

 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB