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 :: Многострочная замена

 PHP.SU

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


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

> Без описания
Anguis
Отправлено: 15 Ноября, 2015 - 17:34:00
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


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




Здрасте.
Нужно заменять многострочные куски текста в файле. str_replace не работает с многострочным текстом, preg replace не могу использовать, т.к. в тексте имеются спец символы, типа ( [ ! * и проч.
Кто может что подсказать?
(Добавление)
Ппц. Весь интернет перерыл - инфы ноль. Нужели не сталкивался ни кто?

PHP:
скопировать код в буфер обмена
  1.  
  2. $file="<div id=menu></div>
  3. <b>Привет</b>
  4. <span>Мы рады вас приветствовать на нашем сайте</span>
  5. <div id=body></div>";
  6.  
  7. $a = "<b>Привет</b>
  8. <span>Мы рады вас приветствовать на нашем сайте</span>";
  9.  
  10. $b = "<b>Доброго времени суток</b>
  11. <span>Мы рады вас приветствовать на нашем сайте</span>";
  12. str_replace($a,$b,$file);//не работает
  13.  
 
 Top
DelphinPRO
Отправлено: 15 Ноября, 2015 - 18:31:57
Post Id



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


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


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




1. Должно работать


2. C каких это пор спецсимволы мешают парсить строки регулярками?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Anguis
Отправлено: 15 Ноября, 2015 - 18:38:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


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




DelphinPRO, не работает, почему-то, возвращает исходный вид и все.
Цитата:
2. C каких это пор спецсимволы мешают парсить строки регулярками?


Ну заведомо неизвестно что на что менять то будем. если в искомой строке есть такое -
PHP:
скопировать код в буфер обмена
  1.  
  2. $needle = "Клевые ботинки.*тут примечание* ";
  3. //разве конструкция .* не сожрет все что ей попадется?
  4.  
 
 Top
DelphinPRO
Отправлено: 15 Ноября, 2015 - 19:11:00
Post Id



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


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


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




Anguis пишет:
разве конструкция .* не сожрет все что ей попадется?

http://php.net/manual/ru/function.preg-quote.php

А вообще стоило бы использовать более подходящий инструмент - simple_xml, DOMDocument, PHPQuery и т.п.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Anguis
Отправлено: 15 Ноября, 2015 - 19:23:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


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




угу нашел касяк. Оказывается str_replace прекрасно справляется, похоже изменяется искомая строка на пути от браузера к серверу, таким образом, что её уже невозможно найти в файле.. только вот как? Вроде выглядит все как надо, при этом однострочные варианты обрабатываются шикарно, а вот если больше одной строки - не работает..
Если у кого есть желание посмотреть - могу ссылку кинуть, но тока в лс. через этот скрипт можно систему форматнуть..
(Добавление)
DelphinPRO пишет:
А вообще стоило бы использовать более подходящий инструмент - simple_xml, DOMDocument, PHPQuery и т.п.


А если документ не валиден? И опять-таки str_replace-ом можно заменить несколько строк с текстом и разметкой одним махом, а через оболочки придется каждый узел менять отдельно.
(Добавление)
замена str_replace на preg_replace ни чего не дала, очевидно проблема в клиенте..
 
 Top
DelphinPRO
Отправлено: 15 Ноября, 2015 - 20:28:47
Post Id



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


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


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




Очевидно, проблема в символах переноса строк.
Кои могут быть \r\n, \n, \r

Anguis пишет:
А если документ не валиден?

phpQuery относительно нормально обрабатывает невалидные документы

(Отредактировано автором: 15 Ноября, 2015 - 20:29:58)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Anguis
Отправлено: 15 Ноября, 2015 - 20:48:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


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




DelphinPRO пишет:
Очевидно, проблема в символах переноса строк.
Кои могут быть \r\n, \n, \r

И как их отловить, что сделать можно?
 
 Top
Anguis
Отправлено: 16 Ноября, 2015 - 12:52:26
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


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




Ребята помогите, уже голова взрывается.
На клиенте отправляю кусочек текущего загруженного документа для изменения:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. //jQuery
  3. $.post('script.php',{oldhtml:$('#edit_el').html(), newhtml:$('textarea').val()});
  4.  

На сервере произвожу замену:
PHP:
скопировать код в буфер обмена
  1.  
  2. $file = 'index.html';
  3. file_put_contents($file,str_replase($_POST['oldhtml'],$_POST['newhtml'],file_get_contents($file)));
  4.  


Замена из одной строки срабатывает, если не одна строка в искомой переменной - не срабатывает.
Что с этими переносами сделать можно, что бы корректно они обрабатывались?.. Кодировка вроде везде одинакова - UTF-8
 
 Top
DelphinPRO
Отправлено: 16 Ноября, 2015 - 14:33:54
Post Id



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


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


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




Привести все переводы строк к одному виду
в исходном тексте и в заменяемом тексте

типа такого str_replace("\r\n", "\n");


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Anguis
Отправлено: 16 Ноября, 2015 - 18:55:17
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


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




Не помогает. Все варианты замен перепробовал... Разнесу! (очень не хватает смайла WALL)
Пришла мысль сравнить строки побайтово что бы вычислить расхождения..
Проблема в том как выделить нужный фрагмент строк из вывода file_get_contents Что такое?

(Отредактировано автором: 16 Ноября, 2015 - 18:59:06)

 
 Top
DelphinPRO
Отправлено: 16 Ноября, 2015 - 19:42:32
Post Id



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


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


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




Anguis пишет:
Не помогает.

Код показывайте, который не работает.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Anguis
Отправлено: 16 Ноября, 2015 - 19:58:07
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


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




Вычислил расхождение - сцучка в символе перевода каретки, ASCII - 13 или \r?
Перевод каретки в файле есть, а из присланного браузером нет.
но почему то ни какие замены типа $f = str_replace("\n\r","\n",$f); или обратные не спасают..
(Добавление)
все, победил. Как оказалось не только перевод каретки мозги пудрил, еще с браузера приходила строка с лишними пробелами в конце Хм
DelphinPRO Поклон
 
 Top
Anguis
Отправлено: 23 Ноября, 2015 - 22:44:46
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


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




Подниму опять.
Ситуация та-же.
CODE (javascript):
скопировать код в буфер обмена
  1. //jQuery
  2. $.post('script.php',{oldhtml:$('#edit_el').html(), newhtml:$('textarea').val()});


PHP:
скопировать код в буфер обмена
  1. $file = 'index.html';
  2. file_put_contents($file,str_replase($_POST['oldhtml'],$_POST['newhtml'],file_get_contents($file)));


Строка в исходном документе -
CODE (html):
скопировать код в буфер обмена
  1. <p><p>Мы работаем, вы отдыхаете!</p></p>

Строка, oldhtml = $('#edit_el').html() которая приходит на сервер -
CODE (html):
скопировать код в буфер обмена
  1. <p></p><p>Мы работаем, вы отдыхаете!</p><p></p>
  2.  


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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB