Перейти к контенту

Не отображать картинки, но отображать смайлы


Рекомендуемые сообщения

Вот в 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-->.

Ссылка на комментарий
Поделиться на других сайтах

вот работающий вариант (любительский, но может гуру подправят)

вместо:

 	 $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)

в конце тремя реплейсами заменяем ключевые слова (так понимаю это должна быть уникальная комбинация символов :D ) на ранее "вырезанные" куски.

 

З.Ы. вопрос более опытным: можно ли в шаблоне preg_replace-a указывать кусок, которого не должно содержаться? например чтобы вторая строка оригинального кода работала если внутри ссылки не содержится "style_emoticons/<#EMO_DIR#>/". тогда можно было бы первую замену просто закоментарить.

Ссылка на комментарий
Поделиться на других сайтах

Спасибо, но методом "перереплейсинга" реализовывал и сам так

 

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.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.