Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 3
Регистрация: 11.09.2011
Сообщений: 557

"Теряются" переводы строк

18.04.2014, 19:25. Показов 2579. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. В общем нужно прочитать файл формата .docx (знаю что в нем нужен файл находящийся по пути /word/document.xml. Собственно читать то его считываю, но вот в нем теряются переводы строк.

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


А в результате идет так (переноса строки нет):
...так и по произвольным текстовым запросам.Задачи автоматически...

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

PHPWord - теряются переводы строк
Добрый день! Делаю шаблонизатор с помощью указанного плагина и столкнулся с такой проблемой: если я вставляю в документ текст, не...

Лишние переводы строк
Уважаемые коллеги, помогите с такой трудностью. Есть вордовский текст, в котором нерадивый пользователь побаловался кнопочкой...

Как в JSON заменить переводы строк (\n) на <br> ?
Добрый день! Получаю JSON, как заменить переводы строк (\n) на &lt;br&gt; ?

12
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
18.04.2014, 19:32
Цитата Сообщение от TheRealKos Посмотреть сообщение
strip_tags
и какие переносы строк после этого останутся?
0
2 / 2 / 3
Регистрация: 11.09.2011
Сообщений: 557
18.04.2014, 19:57  [ТС]
Цитата Сообщение от ads Посмотреть сообщение
и какие переносы строк после этого останутся?
Извиняюсь, старую версию скинул...
Вот так код выглядит:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$filename=$_FILES["filename"]["tmp_name"];
function docx2text($filename) {
    return getTextFromZippedXML($filename, "word/document.xml");
}
function getTextFromZippedXML($archiveFile, $contentFile) {
    // Создаёт "реинкарнацию" zip-архива...
    $zip = new ZipArchive;
    // И пытаемся открыть переданный zip-файл
    if ($zip->open($archiveFile)) {
        // В случае успеха ищем в архиве файл с данными
        if (($index = $zip->locateName($contentFile)) !== false) {
            // Если находим, то читаем его в строку
            $content = $zip->getFromIndex($index);
            // Закрываем zip-архив, он нам больше не нужен
            $zip->close();
 
            // После этого подгружаем все entity и по возможности include'ы других файлов
            // Проглатываем ошибки и предупреждения
            $xml = DOMDocument::loadXML($content, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
 
            return ($xml->saveXML()); //если не делать здесь return
 
            $perenos_xml = array("</w:t>", "</w:p>", "<w:br/>");
            $perenos_norm = "<br />";
 
            //то ругается на эту строчку ниже с ошибкой
            //Object of class DOMDocument could not be converted to string
            //(Объект класса DOMDocument не может быть преобразован в строку)
            $new_perenos = str_replace($perenos_xml, $perenos_norm, $xml);
 
            // После чего возвращаем данные без XML-тегов форматирования
 
            return strip_tags($xml->saveXML(), "<br />");
        }
        $zip->close();
    }
    // Если что-то пошло не так, возвращаем пустую строку
    return "";
}
echo function docx2text($filename);
0
31 / 31 / 13
Регистрация: 11.02.2014
Сообщений: 97
18.04.2014, 22:58
TheRealKos,
за место return ($xml->saveXML());
ставь
PHP
1
$string = $xml->saveXML();
за место
PHP
1
$new_perenos = str_replace($perenos_xml, $perenos_norm, $xml);
надо
PHP
1
$new_perenos = str_replace($perenos_xml, $perenos_norm, $string);
написано же (Объект класса DOMDocument не может быть преобразован в строку)
1
2 / 2 / 3
Регистрация: 11.09.2011
Сообщений: 557
18.04.2014, 23:49  [ТС]
Цитата Сообщение от md5ffx Посмотреть сообщение
написано же (Объект класса DOMDocument не может быть преобразован в строку)
Подобным образом пытался, не получилось. Сделал как вы написали. Пишет туже ошибку, на туже строчку...
0
31 / 31 / 13
Регистрация: 11.02.2014
Сообщений: 97
18.04.2014, 23:56
TheRealKos, текущий код покажите
0
2 / 2 / 3
Регистрация: 11.09.2011
Сообщений: 557
19.04.2014, 00:03  [ТС]
Цитата Сообщение от md5ffx Посмотреть сообщение
текущий код покажите
Мой косяк был. Не ругается, НО текст по-прежнему без переносов строк
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$filename=$_FILES["filename"]["tmp_name"];
function docx2text($filename) {
    return getTextFromZippedXML($filename, "word/document.xml");
}
function getTextFromZippedXML($archiveFile, $contentFile) {
    // Создаёт "реинкарнацию" zip-архива...
    $zip = new ZipArchive;
    // И пытаемся открыть переданный zip-файл
    if ($zip->open($archiveFile)) {
        // В случае успеха ищем в архиве файл с данными
        if (($index = $zip->locateName($contentFile)) !== false) {
            // Если находим, то читаем его в строку
            $content = $zip->getFromIndex($index);
            // Закрываем zip-архив, он нам больше не нужен
            $zip->close();
 
            // После этого подгружаем все entity и по возможности include'ы других файлов
            // Проглатываем ошибки и предупреждения
            $xml = DOMDocument::loadXML($content, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
 
            $string = $xml->saveXML();
 
            $perenos_xml = array("</w:t>", "</w:p>", "<w:br/>");
            $perenos_norm = "<br />";
 
            //то ругается на эту строчку ниже с ошибкой
            //Object of class DOMDocument could not be converted to string
            //(Объект класса DOMDocument не может быть преобразован в строку)
            $new_perenos = str_replace($perenos_xml, $perenos_norm, $string);
 
 
            // После чего возвращаем данные без XML-тегов форматирования 
            return strip_tags($xml->saveXML(), "<br />");
        }
        $zip->close();
    }
    // Если что-то пошло не так, возвращаем пустую строку
    return "";
}
echo function docx2text($filename);
0
31 / 31 / 13
Регистрация: 11.02.2014
Сообщений: 97
19.04.2014, 00:06
TheRealKos,
PHP
1
var_dump($string);
и

PHP
1
var_dump($new_perenos );
скопируйте кусок текста чтобы до и после замены было видно "</w:t>", "</w>", "<w:br/>" теги
также можно глянуть меняет он че или нет
PHP
1
2
$new_perenos = str_replace($perenos_xml, $perenos_norm, $string,$count);
echo $count;
1
2 / 2 / 3
Регистрация: 11.09.2011
Сообщений: 557
19.04.2014, 00:14  [ТС]
Цитата Сообщение от md5ffx Посмотреть сообщение
скопируйте кусок текста чтобы до и после замены было видно "</w:t>", "</w>", "<w:br/>" теги
Нужно было сделать так: $string = iconv("UTF-8", "Windows-1251", $xml->saveXML()). Только теперь в другом проблема.
var_dump($new_perenos ) выводит текст вроде нормально (единственное что есть лишние переносы строк, в тексте это были пробелы через Tab, ну вроде ладно...). Но само echo function docx2text($filename) выводит текст без переносов...
0
31 / 31 / 13
Регистрация: 11.02.2014
Сообщений: 97
19.04.2014, 00:17
TheRealKos, потомучто у вас
PHP
1
return strip_tags($xml->saveXML(), "<br />");
а нужно
PHP
1
return $new_perenos;
1
2 / 2 / 3
Регистрация: 11.09.2011
Сообщений: 557
19.04.2014, 00:21  [ТС]
Цитата Сообщение от md5ffx Посмотреть сообщение
также можно глянуть меняет он че или нет
75 - ну я так понимаю 75 замен?)
0
31 / 31 / 13
Регистрация: 11.02.2014
Сообщений: 97
19.04.2014, 00:26
TheRealKos, да)
0
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 1
26.04.2016, 17:49
А как сделать, чтобы текст возвращался подчеркнутый, если он подчеркнут в вордовском файле?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2016, 17:49
Помогаю со студенческими работами здесь

Переводы строк при .createRange().htmlText или .innerHTML
Пытаюсь довести до ума скрипт для вставки в любимый редактор выделенного текста со страницы. ==================================== ...

При вставке текста через phpMyAdmin обрезаются переводы строк
Доброго времени. Подскажите, пожалуйста, информацию по следующей проблеме ... В таблице есть несколько полей, среди которых два TEXT....

Как в RichTextBox не выделять переводы строк в конце каждой строки?
Собственно хочу сделать маломайский Hex-редактор, реализовал уже синхронизацию двух RichTextBox'ов и прочее, но проблема теперь в...

Разработать функцию ‘escape(s, t)’, которая копирует строку s в массив t, попутно заменяя все переводы строк на последов
Здравствуйте, задание: Разработать функцию ‘escape(s, t)’, которая копирует строку s в массив t, попутно заменяя все переводы строк на...

Переводы Цифр
Ребята помогите пожалуйста разобраться: мне нужно перевести из арабских цифр в римские от 1 до 50. Dim a, b As Integer a =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru