Hostem Опубликовано 30 Апреля 2005 Жалоба Поделиться Опубликовано 30 Апреля 2005 Вот в ipb можно отключить и смайлики, и картинки. Сначала преобразовывают смайлики (которые окружены <!--emo&код_смайлика--> и <!--endemo-->) в их код, а потом уже преобразовываем картинки, вставленные тэгом IMG. И все номально. if (!$ibforums->member['view_img']) { // unconvert smilies first, or it looks a bit crap. $row['post'] = preg_replace( "#<!--emo&(.+?)-->.+?<!--endemo-->#", "\\1" , $row['post'] ); $row['post'] = preg_replace( "/<img src=[\"'](.+?)[\"'].+?".">/", "(IMG:<a href='\\1' target='_blank'>\\1</a>)", $row['post'] ); } А если надо преобразовать только картинки вставленные тэгом IMG, а сами смайлики картинками оставить. Если убрать строку $row['post'] = preg_replace( "#<!--emo&(.+?)-->.+?<!--endemo-->#", "\\1" , $row['post'] );, то просто смайлы преобразовываются в (IMG: ссылка на смайлик). Как написать такое регулярное выражение: преобразовывать картинки, но не окруженные <!--emo&код_смайлика--> и <!--endemo-->. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
BeS Yara Опубликовано 1 Мая 2005 Жалоба Поделиться Опубликовано 1 Мая 2005 вот работающий вариант (любительский, но может гуру подправят)вместо: $row['post'] = preg_replace( "#<!--emo&(.+?)-->.+?<!--endemo-->#", "\\1" , $row['post'] ); $row['post'] = preg_replace( "/<img src=[\"'](.+?)[\"'].+?".">/", "(IMG:<a href='\\1' target='_blank'>\\1</a>)", $row['post'] ); сделать: $row['post'] = preg_replace( "#<!--emo&(.+?)--><i(.+?)<!--endemo-->#", "SMILE_START:\\1:NAME:\\2:SMILE_END" , $row['post'] ); $row['post'] = preg_replace( "/<img src=[\"'](.+?)[\"'].+?".">/", "(IMG:<a href='\\1' target='_blank'>\\1</a>)", $row['post'] ); $row['post'] = str_replace( "SMILE_START:" , "<!--emo&" , $row['post']); $row['post'] = str_replace( ":NAME:" , "--><i" , $row['post']); $row['post'] = str_replace( ":SMILE_END" , "<!--endemo-->" , $row['post']); т.е. результат работы первых двух строк:SMILE_START::doublesmile::NAME:mg src='style_emoticons/default/DoubleSmile.gif' border='0' style='vertical-align:middle' alt='DoubleSmile.gif' />:SMILE_END (IMG:http://127.0.0.1/ipb/style_emoticons/default/lol.gif)в конце тремя реплейсами заменяем ключевые слова (так понимаю это должна быть уникальная комбинация символов ) на ранее "вырезанные" куски. З.Ы. вопрос более опытным: можно ли в шаблоне preg_replace-a указывать кусок, которого не должно содержаться? например чтобы вторая строка оригинального кода работала если внутри ссылки не содержится "style_emoticons/<#EMO_DIR#>/". тогда можно было бы первую замену просто закоментарить. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 1 Мая 2005 Автор Жалоба Поделиться Опубликовано 1 Мая 2005 Спасибо, но методом "перереплейсинга" реализовывал и сам так if (не отображать смайлики) $row['post'] = preg_replace( "#<!--emo&(.+?)-->.+?<!--endemo-->#", "\\1", $row['post'] ); if (не отображать картинки) { if (не отображать смайлики) $row['post'] = preg_replace( "#<!--emo&(.+?)--><img(.+?)<!--endemo-->#", "<!--emo&\\1--><img \\2<!--endemo-->" , $row['post'] ); $row['post'] = preg_replace( "/<img src=[\"'](.+?)[\"'].+?".">/", "(IMG:<a href='\\1' target='_blank'>\\1</a>)", $row['post'] ); } т.е. если не надо преобразовывать смайлики мы все, что после "<img" сдвигаем на пробел и у смайликов выходит два пробела после img. Хотелось бы преобразовывать картинки, но не смайлики одним preg_replace. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.