yr4ik Posted January 12, 2016 Report Share Posted January 12, 2016 yr4ik, Ваш код не хочет работать, та же проблема что в самом начале.Спасибо всем за помощь, код mishanya прекрасно справляется с задачей. А проблему нельзя конкретно описать??Скорее всего вы просто не правильно его в код вставили.... Quote Link to post Share on other sites
yodaexolon Posted January 12, 2016 Author Report Share Posted January 12, 2016 Вставил так: public function hashtag_modifier($str) { $new_str = $str; if(preg_match_all('#(style|href)=([\'"])([^\'"]+?)\\1#iu', $str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Затираем style foreach($matches as $m){ $_length = strlen($m[0][0]); $new_str = substr_replace($new_str, str_repeat('*', $_length), $m[0][1], $_length); } } if(preg_match_all('/#(\w+)/iu', $new_str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Поиск наших тегов $_offset = 0; foreach($matches as $m){ $_length = strlen($m[0][0]); $replace = '<a href="tags?keyword='.$m[1][0].'">#'.$m[1][0].'</a>'; $str = substr_replace($str, $replace, $m[0][1] - $_offset, $_length); $_offset += $_length - strlen($replace); } } return $str; } Quote Link to post Share on other sites
yr4ik Posted January 12, 2016 Report Share Posted January 12, 2016 Ну опять же - проблему не описали!А по предыдущим постам не поймешь что за ошибка... Интуитивно могу предположить что речь идет о игнорировании тегов типа ##tag Если да то вторая регулярка так: if(preg_match_all('/(?<!#)#(\w+)/iu', $new_str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Поиск наших тегов Quote Link to post Share on other sites
yodaexolon Posted January 13, 2016 Author Report Share Posted January 13, 2016 Когда я вставляю ваш первый код, то возникает та же проблема что я описывал в посте: http://forum.simplacms.ru/topic/10886-%D0%BF%D0%BE%D0%BC%D0%BE%D0%B3%D0%B8%D1%82%D0%B5-%D1%81-%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BA%D0%BE%D0%B9/?do=findComment&comment=83644 Quote Link to post Share on other sites
Solution yr4ik Posted January 13, 2016 Solution Report Share Posted January 13, 2016 (edited) Все понял. Исправил код в #24 посте (нужна обратная ссылка на \\2 а не на \\1): if(preg_match_all('#(style|href)=([\'"])([^\'"]+?)\\2#iu', $str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Затираем styleИ лучше наверное затирать не атрибуты, а html теги. Оставлять только содержимое их.Если хотите то правьте эту регулярку на поиск html тегов (в инете есть готовые), а не атрибутов href и style. Edited January 13, 2016 by yr4ik Quote Link to post Share on other sites
yodaexolon Posted January 13, 2016 Author Report Share Posted January 13, 2016 Все работает как надо, добавил еще варианты |bgcolor|bordercolor, пока косяки в статьях и описаниях товара не обнаружены. Спасибо огромное! Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.