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 :: Неожиданный эффект preg_replace.

 PHP.SU

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


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

> Описание: preg_replace спотыкается об "\00a0"
shum0531
Отправлено: 20 Марта, 2020 - 13:36:59
Post Id



Гость


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


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




Доброго времени суток.
Столкнулся с проблемой:

Почему то происходит замена не только в месте где '@@DTAG@@.', но и '\00a0'. В моем случае "\00a0" присутствует в css коде.
Помогите кто знает что это за баг и как его обойти.
 
 Top
shum0531
Отправлено: 20 Марта, 2020 - 18:05:50
Post Id



Гость


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


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




Сам допер почему так)))
Другой вопрос: как запретить использование ссылок в параметре replacement?
 
 Top
Строитель Модератор
Отправлено: 20 Марта, 2020 - 20:58:42
Post Id



Участник


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


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




shum0531 пишет:
как запретить использование ссылок в параметре replacement?

Не подставлять их в качестве замены. Как же ещё?
 
 Top
LIME
Отправлено: 21 Марта, 2020 - 01:13:07
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




shum0531 судя по твоему шаблону PCRE тебе совсем и не нужна замена по шаблону
предлагаю str_replace
дешево и сердито
или я чегото недопонял?
Строитель ???
(Добавление)
shum0531 шум я чето недопонял
в чем трабла?
(Добавление)
так стоп
неразрывный пробел
я точно с этим не сталкивался
Строитель, shum0531 вы на пальцах поясните а уж решения я вам выдам будьте уверены
ну не сталкивался я тыщу лет с версткой и текстами
все более по DDD и архитектуре и API
 
 Top
shum0531
Отправлено: 22 Марта, 2020 - 15:08:23
Post Id



Гость


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


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




LIME пишет:
shum0531 судя по твоему шаблону PCRE тебе совсем и не нужна замена по шаблону
предлагаю str_replace
дешево и сердито
или я чегото недопонял?
Строитель ???
(Добавление)
shum0531 шум я чето недопонял
в чем трабла?
(Добавление)
так стоп
неразрывный пробел
я точно с этим не сталкивался
Строитель, shum0531 вы на пальцах поясните а уж решения я вам выдам будьте уверены
ну не сталкивался я тыщу лет с версткой и текстами
все более по DDD и архитектуре и API

Весь прикол в том что str_replace не поддерживает limit, поэтому было принято решение использовать preg_replace.
В итоге решил таким образом:
PHP:
скопировать код в буфер обмена
  1. $replace_references = array('\0', '@@replace_temp@@');
  2. $curr_block = str_replace($replace_references[0], $replace_references[1], $curr_block);
  3. $html = preg_replace("!@@DTAG@@!", $curr_block, $html, 1);
  4. $html = str_replace($replace_references[1], $replace_references[0], $html);

То есть, с начало избавляюсь от ссылок вида "\0," потом preg_replace и после возвращаю "\0" на место.
Как то проще не придумал.))
 
 Top
LIME
Отправлено: 22 Марта, 2020 - 15:16:36
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




shum0531 а проще и не надо
Если придумалось и работает и проблемы не предвидится, пусть работает.
Простота в решении нужна не ради самой простоты, а чтоб не накосячить. В сложных решениях проще ошибиться.
Все сложные решения типа CQRS это по сути упрощения очень сложного к просто сложному.
Тут вроде норм решение.
Годится.
(Добавление)
А еще есть готовые библы по парсингу стандартных форматов. Учел?
 
 Top
shum0531
Отправлено: 22 Марта, 2020 - 15:38:32
Post Id



Гость


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


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




LIME пишет:
А еще есть готовые библы по парсингу стандартных форматов. Учел?

Делал как то тесты на библиотеки, самый "скоростной" -это текущий)) . А если речь идет о внешних php extension, то тут тоже все сложно. Я дорабатываю чужой сайт, который на скудном хостинге))
 
 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