preg_replace неожиданная проблема

Relige

Новичок
preg_replace неожиданная проблема

Собственно стоит задача такая - добавить bbcode [plus=,header=]text[/plus]

plus=тут должен стоять какой-то номер, а скрипт должен к нему добавлять ID новости. Например:

Посылаем:
[plus=1,header=Ops]Text[/plus]

Получаем на выходе готовый html код, учитывая, что ID новости 500
<a href="javascript:swap(500.1);">Ops text</a>

А теперь сам вопрос. Написал две функции. Одна достает из SQL таблицы ID новости и текст, который содержит bbcode и отдает в другую.

function nor_bbcode($text,$id="empty")
{
$text = preg_replace("=\[plus\=(.*?),header\=(.*?)\](.*?)\[/plus\]=is", "<a href=\"javascript:swap($id.$1);\">$2 $3</a>", $text);

return $text;
}

Проблема в том, что вместо $id ничего не выводится. Даже пробел. При попытке сделать $text = $id для проверки получает ли функция вообще $id, все сработало, то есть функция получает коректный $id.

Если верить функции, которая возвращает тип переменной, то тип $id - string, что тоже соответствует спецификации функции preg_replace. Так в чем тогда проблема-то? Никак не пойму.
 

zarus

Хитрожопый макак
"<a href=\"java script:swap(".$id.".$1);\">$2 $3</a>",
иди читать фак, почему не надо писать переменные внутри строк
 

Relige

Новичок
Я так пробовал, эффект тот же. Вместо $id пустое место.
 

zarus

Хитрожопый макак
[telepat.mode On]
register_globals Off
[/telepat.mode Off]
И вообще, завязывайте с альтернативными ограничителями
PHP:
$id = 500;
$str = '[plus=1,header=Ops]Text[/plus]';
$str = preg_replace('/\[plus\=(.*?),header\=(.*?)\](.*?)\[\/plus\]/si','<a href="java script:swap(\''.$id.'.\1\');">\2 \3</a>',$str);
echo $str;
 

Relige

Новичок
Все-равно не работает. Ну что за фигня такая?

Твой скрипт работает, сделал переменный off, вроде все ок. Потом стираю строчку
$id = 500;

И все так же - ничего не выводит, где должен быть $id.
Хотя если в процедуре просто поставить return $id - все нормально, $id возвращается правильный, то есть $id в процедуру попадает корректный.
 

white phoenix

Новичок
Relige
приведи код который через return $id возвращает значение, а preg_replace на месте $id ничего не выводит. для чистоты эксперимента.
 

Relige

Новичок
А все - все заработало. Это я уже тормозить стал. За компом меньше сидеть надо =)

Спасибо Zarus'y за помощь.
 
Сверху