комбинация текстовых функций не работает

no_santa

Снегур
комбинация текстовых функций не работает

Замена BBcode картинки на HTML <img>
PHP:
$str = preg_replace('/\[img\](.*)\[\/img\]/','<a href="'.str_replace('/thumbs','',"$1").'" title="Увеличить" target="_blank"><img src="'."$1".'" border="0"></a>',$str);
не работает в части
PHP:
'.str_replace('/thumbs','',"$1").'
$1 в функцию str_replace приходит, то есть получаются полноценные ссылки на уменьшенные копии картинок, а должны быть большие. 'thumbs' не вырезается.


Почему? Как сделать? Кто знает?
 

kruglov

Новичок
в $1 первый карман не пойдет, т.к. $1 уже аргументом не у preg_replace, а у str_replace будет
 

no_santa

Снегур
baev а ты знаешь более точное место мануала, прочтя которое можно РЕШИТЬ эту проблему? Посвяти?


kruglov попало. И в Str_replace попало. Только str_replace по-ходу не хочет внутри preg_replace работать, или я что-то некорректно делаю.

-~{}~ 22.04.08 16:35:

baev описание str_replace смотрел и не раз. Вот еще раз посмотрел - ничего интересного не нашел. Ты можешь уточнить свою мысль?

-~{}~ 22.04.08 16:39:

из
PHP:
[img]pictures/2/thumbs/image_2008_April_20-18_09_29-d18c255f89434eab3211813c0e765c6b.jpg[/img]
получается
PHP:
<a href="pictures/2/thumbs/image_2008_April_20-18_08_58-177540c7bcb8db31697b601642eac8d4.jpg" title="Увеличить" target="_blank"><img src="pictures/2/thumbs/image_2008_April_20-18_08_58-177540c7bcb8db31697b601642eac8d4.jpg" border="0"></a>
а надо
PHP:
<a href="pictures/2/image_2008_April_20-18_08_58-177540c7bcb8db31697b601642eac8d4.jpg" title="Увеличить" target="_blank"><img src="pictures/2/thumbs/image_2008_April_20-18_08_58-177540c7bcb8db31697b601642eac8d4.jpg" border="0"></a>
 

baev

‹°°¬•
Команда форума
no_santa, у Вас в $subject — строка $1.
Уточняю свою мысль: строка состоящая из двух символов — символа доллара и единицы.
И в этой строке нет искомой подстроки /thumbs.
И на выходе str_replace мы получаем оригинальную строку из двух символов.

Попробуйте для наглядности запустить код:
PHP:
$str="[COLOR=red][[/COLOR]img]site/thumbs/pict1.jpg[COLOR=red][[/COLOR]/img]";


$str = preg_replace('/\[img\](.*)\[\/img\]/','<a href="'.var_dump(str_replace('/thumbs','','$1')).'" title="Увеличить" target="_blank"><img src="'."$1".'" border="0"></a>',$str);
 

no_santa

Снегур
kruglov Респект!!! Уважуха!!! Дай бог тебе здоровья и успеха в делах!!!
 

AmdY

Пью пиво
Команда форума
preg_replace здесь не очень хорошо смотрится, лучше использовать кэл бак функцию, надеюсь найдёте как
 

no_santa

Снегур
kruglov не работает

-~{}~ 22.04.08 17:48:

AmdY смотря что вы подразумеваете под call back

-~{}~ 22.04.08 17:49:

работает так:

'/\[img\](.*)(\/thumbs)(.*)\[\/img\]/'

kruglov еще раз спасибо!
 

AmdY

Пью пиво
Команда форума
http://www.php.net/manual/ru/function.preg-replace.php - здесь есть очень похожий пример
http://www.php.net/manual/ru/function.preg-replace-callback.php - а так я бы делал
 

no_santa

Снегур
конечная версия:

$str = preg_replace('/\[img\](.*)(\/thumbs)(.*)\[\/img\]/','<a href="'."$1"."$3".'" title="Увеличить" target="_blank"><img src="'."$1"."$2"."$3".'" border="0"></a>',$str);

-~{}~ 24.04.08 10:33:

AmdY таки вы хотите сказать, что пользовательская функция будет работать быстрее конкатенции?

Этот вопрос действительно интересен. Дело в том, что основная причина, из-за которой я остановился именно на этом решении - это полная совместимость по регуляркам и синтаксису с JavaScript, на котором реализован предварительный просмотр отформатированного текста.
 

AmdY

Пью пиво
Команда форума
иногда нужно задаваться вопросом как удобнее, а не как быстрее.
в исходном варианте вы использовали str_replace, которая по умолчанию не сработает, нужно использовать модификатор, либо callback
 
Сверху