Есть статья, хочу в ней почистить всякое. Для примера делаю так $content = str_replace("<p> </p>", "", $content); Если я вставляю данный скрипт на страничку вывода этой самой статьи он прекрасно отрабатывает, но решил сделать красиво и удалять это перед записью моей cms в БД. Вставил туда это и с удивлением обнаружил, что замена тегов не получается. Если меняю любой просто текст всё прекрасно, "<" и ">" видимо и есть камень преткновения. Подскажите как это можно победить?
Работает как нужно. Попробуй так: Код (Text): echo str_replace("<p> </p>", "", htmlspecialchars_decode($content));
спасибо за помощь, но не помогло, к счастью это легко решается регуляркой (и почему я сразу об этом не подумал? ))
считай что на изоленту налепил ещё одну изоленту лучше найди причину. выведи текст до str_replace и после.
а где же я найду текст ДО, если я сразу в базу записываю измененный текст? если писать в базу текст с мусором, то на выводе страницы все и так работало.
кстати, с некоторыми тегами мне удалось разобраться. Сделал предварительное "правильное" форматирование, ибо там встречались варианты по типу таких "<p >", дальше решил попробовать более сложные элементы по типу ссылок вот тут опять получилась загвоздка. Попробовал такую регулярку. На странице с 2-мя ссылками (разные домены). Одну ест, вторую не хочет. Код (Text): $content = preg_replace('#<a href="http://site1.*?</a>#is', "", $content); $content = preg_replace('#<a href="http://site2.*?</a>#is', "", $content); Кстати чем плох такой вариант? Если надо все ссылки убрать, то без проблем работает такой вариант: Код (Text): $content = preg_replace('#<a href=.*?</a>#is', "", $content); Добавлено спустя 23 минуты 45 секунд: Текст до записи: Спойлер <p><b>GBP/USD h4 </b></p> <blockquote> <br /> <br /> Операционный масштаб <b>Minute</b> <br /> <br /> <b><i>Текущая ситуация:</i></b> <br /> <br /> Цена <b>GBP/USD</b>, отбившись от <b>1/2 Median Line Minute</b> (<b>1.6289</b>), оказалась в границах <b>зоны равновесия</b> вил <b>младшего </b>операционного масштаба <b>Minuette</b> <b>1.6210 <-> 1.6175 <-> 1.6142</b>, отработка которых и станет определять движение цены инструмента в оставшиеся дни торговых сессий 2012 г. (<b>с 24 по 31 декабря</b>). <br /> <br /> <i><b>Детализация вариантов движения:</b></i> <br /> <br /> -> <b><i>флетовое движение </i></b>в границах <b>зоны равновесия </b>вил <b>младшего </b>операционного масштаба <b>Minuette</b> -> <b>1.6210 <-> 1.6175 <-> 1.6142</b>; <br /> <br /> -> <b>пробой </b>уровня <b>сопротивления 1.6210</b> на верхней границе <b>зоны равновесия</b> вил <b>младшего </b>операционного масштаба <b>ISL38.2 Minuette</b> направит цену к границам <b>канала 1/2 Median Line Minuette</b> -> <b>1.6233 <-> 1.6253 <-> 1.6275</b>, а пробой<b> 1/2 Median Line Minute</b> (<b>1.6289</b>) сделает возможным достижение целей -><b> 1.6314</b> (начальная линия <b>SSL Minuette</b>) <b><-> 1.6369</b> (верхняя граница <b>канала 1/2 Median Line</b> вил <b>старшего </b>операционного масштаба <b>Minute</b>); <br /> <br /> -> <b>пробой </b>уровня <b>поддержки 1.6142</b> на нижней границе <b>зоны равновесия</b> вил <b>младшего </b>операционного масштаба <b>ISL61.8 Minuette</b> сделает актуальным продолжение нисходящего движения к целевым уровням -> <b>1.6081 </b>(начальная линия вил <b>старшего </b>операционного масштаба <b>SSL Minute</b>) <b><-> 1.6036</b> (конечная линия <b>FSL Minuette</b>) <b><-> 1.5967</b> (предупредительная линия <b>LWL50.0 Minuette</b>) <b><-> 1.5953</b> (контрольная линия <b>LTL Minute</b>). <br /> <br /> <br /> <br /> <img width="450" src="http://forex-images.instaforex.com/userfiles/20121221/GBP_h4_24.12_31.12.png" alt="" /> <br /> <br /> Вопросы и обсуждение обзоров -> <a href="http://ruforum.mt5.com/threads/18266-analitika-ot-olega-hmelevskogo-obsuzhdenie-i-voprosi-avtoru/page2" ><b>Аналитика от Олега Хмелевского: обсуждение и вопросы автору</b></a> <br /> <br /> Блог -> <a href="http://blog.mt5.com/geloxm" ><b> Gelox Blog</b></a> <br /> <br /> <b><a href="http://instaforex.com/ru/forex_analysis?author=22?x=DPYV" >Ежедневные обзоры валютных инструментов на instaforex.com</a></b> </blockquote> <p> </p>Материал предоставлен компанией Instaforex - <a href='http://instaforex.com/ru'>instaforex.com</a> После применения таких фильтров Код (Text): $content = str_replace("<p> </p>", "", $content); $content = str_replace("<p > </p>", "", $content); $content = str_replace("<b> </b>", "", $content); $content = str_replace("<p >", "<p>", $content); $content = str_replace("<p></p>", "", $content); $content = str_replace("<blockquote>", "", $content); $content = str_replace("</blockquote>", "", $content); $content = preg_replace('#Материал предоставлен.*?</a>#is', "", $content); $content = preg_replace('#<a href="http://blog.mt5..*?</a>#is', "", $content); $content = preg_replace('#Блог .*?</a>#is', "", $content); $content = preg_replace('#Вопросы и обсуждение обзоров.*?</a>#is', "", $content); $content = preg_replace('#<a href="http://instaforex.*?</a>#is', "", $content); Спойлер <p><b>Gold h4 </b></p> Операционный масштаб <b>Minute</b> <br /> <br /> <b><i>Текущая ситуация:</i></b> <br /> <br /> Цена <b>Gold</b>, отбившись от <b>Median Line Minute</b> (<b>1635.07</b>), на текущий момент не смогла пробить уровень сопротивления <b>1658.99 </b>на нижней границе <b>зоны равновесия </b>вил <b>младшего </b>операционного масштаба <b>ISL61.8 Minuette</b>, тем самым оказалась в диапазоне -> <b>1649.08</b> (<b>ISL38.2 Minute</b>) <b><-> 1658.99</b> (<b>ISL61.8 Minuette</b>), направление выхода из которого и станет определять развитие движения цены инструмента <b>с 24 по 31 декабря 2012 г.</b> <br /> <br /> <i><b>Детализация вариантов движения:</b></i> <br /> <br /> -> возможно <i><b>флетовое движение</b></i> в этом <b>диапазоне </b>-> <b>1649.08</b> (верхняя граница <b>зоны равновесия</b> вил <b>старшего </b>операционного масштаба<b> ISL38.2 Minute</b>) <b><-> 1658.99 </b>(нижняя граница <b>зоны равновесия </b>вил <b>младшего </b>операционного масштаба <b>ISL61.8 Minuette</b>); <br /> <br /> -> <b>пробой </b>уровня <b>сопротивления 1658.99</b> (<b>ISL61.8 Minuette</b>) определит движение в границах <b>зоны равновесия</b> вил <b>младшего </b>операционного масштаба <b>Minuette</b> -> <b>1658.99 <-> 1664.89 <-> 1670.38</b>, в случае пробоя<b> ISL38.2 Minuette</b> (<b>1670.38</b>) цена вернется в границы <b>канала 1/2 Median Line</b> вил <b>старшего </b>операционного масштаба <b>Minute</b> -><b> 1670.38 <-> 1681.83 <-> 1693.28</b>, движение внутри которых станет зависеть от отработки <i>уровней границ <b>канала 1/2 Median Line Minuette</b> </i>(<b>1677.30 <-> 1681.83 <-> 1688.03</b>), <i><b>взаимодействие </b></i>указанных уровней показано <i><b>на графике</b></i>; <br /> <br /> -> <b>пробой </b>уровня<b> поддержки 1649.08 </b>(<b>ISL38.2 Minute</b>) вернет движение цены инструмента в границы <b>зоны равновесия</b> вил <b>старшего </b>операционного масштаба <b>Minute</b> -> <b>1649.08 <-> 1635.07 <-> 1619.80</b>, данное движение так же станет определяться отработкой <i><b>уровней </b>линий вил <b>младшего </b>операционного масштаба <b>Minuette</b></i>, <i><b>подробности </b></i>смотрим <b>на графике</b>, в случае пробоя <b>ISL61.8 Minute </b>(<b>1619.80</b>) движение может быть продолжено к целевым уровням -> <b>1610.49 </b>(контрольная линия <b>LTL Minuette</b>) <b><-> 1572.55</b> (конечная линия <b>FSL Minute</b>). <br /> <br /> <br /> <br /> <img width="450" src="http://forex.rpif.net/wp-content/plugins/wp-o-matic/cache/db26a71b2b_Gold-h4-24-12-31-12.png" alt="" /> <br /> <br /> <br /> <br /> <br /> <br /> <b><a href="http://instaforex.com/ru/forex_analysis?author=22?x=DPYV" target="_blank">Ежедневные обзоры валютных инструментов на instaforex.com</a></b> Последняя ссылка в данном случае не исчезла.
Ладно. 1. str_replace и preg_replace принимают массивы что на что заменять. 2. фиксить пробелы глупо через str_replace("<p >", "<p>", $content); , если в одном теге мура приходит, то и в остальных тоже будет, потому хотя бы примитивно можно делать str_replace(" >", ">", $content); 3. Юзаешь видимо WYSIWYG редактор, наверняка tinymce, но забываешь что на твою пхпшку могут послать что угодно. В присланном хтмл может быть и <iframe>, и <script>, и <!script>, и <style>, и <meta> и т.п. Тут нужно включать paranoia mode. 4. Разбираться зачем ты юзаешь чтото по типу $content = preg_replace('#Материал предоставлен.*?</a>#is', "", $content); даже не буду. Если тебе форму заполняют по шаблону, то это должна быть форма с лейблами и т.п, а не готовый хтмл шаблон отправки который ты всё-равно режешь. Если ты будешь так агрессивно использовать риплейсы и регулярки, то проще и, как минимум, в 10 раз быстрее будет кодиться если поставишь phpQuery или хотя бы Simple HTML DOM. Работать они возможно будут даже быстрее чем множество регулярок и риплейсов проходящих по одному и тому же тексту множество раз. И в любом случае с любой из этих либ. будет кодиться проще и быстрее.
Спасибо за внимание к моей проблеме, но как всегда есть много НО. Всё это дело работает на вордпрессе, поэтому в код редактора не лезу, чтобы при очередном обновлении это всё дело не слегло, по этой же причине отлетают и phpQuery с Simple HTML DOM. Ну и самое главное, что текст может быть написан не только через редактор, но и даваться через программы удаленного постинга, рсс и т.д. и т.п. вот собственно после последних и появляется весь этот мусор. Та статья, что я привел можно сказать почти чистая, чаще прилетает такое, что мама не горюй. Насчет str_replace(" >", ">", $content); за мысль спасибо, но сейчас я не ввожу каких-то глобальных правил я просто пытаюсь замутить скриптик, который бы без проблем менял тексты по ЛЮБЫМ шаблонам.
ну вот там и подключать phpQuery или PHP Simple HTML DOM. Дальше через них парсить входящий хтмл и вырубать и врубать что надо.