Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
Здрасте.
Нужно заменять многострочные куски текста в файле. str_replace не работает с многострочным текстом, preg replace не могу использовать, т.к. в тексте имеются спец символы, типа ( [ ! * и проч.
Кто может что подсказать? (Добавление)
Ппц. Весь интернет перерыл - инфы ноль. Нужели не сталкивался ни кто?
А вообще стоило бы использовать более подходящий инструмент - simple_xml, DOMDocument, PHPQuery и т.п.
----- Чем больше узнаю, тем больше я не знаю.
Anguis
Отправлено: 15 Ноября, 2015 - 19:23:56
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
угу нашел касяк. Оказывается str_replace прекрасно справляется, похоже изменяется искомая строка на пути от браузера к серверу, таким образом, что её уже невозможно найти в файле.. только вот как? Вроде выглядит все как надо, при этом однострочные варианты обрабатываются шикарно, а вот если больше одной строки - не работает..
Если у кого есть желание посмотреть - могу ссылку кинуть, но тока в лс. через этот скрипт можно систему форматнуть.. (Добавление)
DelphinPRO пишет:
А вообще стоило бы использовать более подходящий инструмент - simple_xml, DOMDocument, PHPQuery и т.п.
А если документ не валиден? И опять-таки str_replace-ом можно заменить несколько строк с текстом и разметкой одним махом, а через оболочки придется каждый узел менять отдельно. (Добавление)
замена str_replace на preg_replace ни чего не дала, очевидно проблема в клиенте..
DelphinPRO
Отправлено: 15 Ноября, 2015 - 20:28:47
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Очевидно, проблема в символах переноса строк.
Кои могут быть \r\n, \n, \r
Anguis пишет:
А если документ не валиден?
phpQuery относительно нормально обрабатывает невалидные документы
Замена из одной строки срабатывает, если не одна строка в искомой переменной - не срабатывает.
Что с этими переносами сделать можно, что бы корректно они обрабатывались?.. Кодировка вроде везде одинакова - UTF-8
DelphinPRO
Отправлено: 16 Ноября, 2015 - 14:33:54
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Привести все переводы строк к одному виду
в исходном тексте и в заменяемом тексте
типа такого str_replace("\r\n", "\n");
----- Чем больше узнаю, тем больше я не знаю.
Anguis
Отправлено: 16 Ноября, 2015 - 18:55:17
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
Не помогает. Все варианты замен перепробовал... (очень не хватает смайла WALL)
Пришла мысль сравнить строки побайтово что бы вычислить расхождения..
Проблема в том как выделить нужный фрагмент строк из вывода file_get_contents
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Anguis пишет:
Не помогает.
Код показывайте, который не работает.
----- Чем больше узнаю, тем больше я не знаю.
Anguis
Отправлено: 16 Ноября, 2015 - 19:58:07
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
Вычислил расхождение - сцучка в символе перевода каретки, ASCII - 13 или \r?
Перевод каретки в файле есть, а из присланного браузером нет.
но почему то ни какие замены типа $f = str_replace("\n\r","\n",$f); или обратные не спасают.. (Добавление)
все, победил. Как оказалось не только перевод каретки мозги пудрил, еще с браузера приходила строка с лишними пробелами в конце DelphinPRO
Anguis
Отправлено: 23 Ноября, 2015 - 22:44:46
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.