Как я могу сделать этот BBcode? [HTML в PHP]

Возможный дубликат:
регулярное выражение php ‹b› на ‹b›

Внутри моей панели администратора у меня есть текстовое поле, где сотрудники могут вставлять сообщения клиентам.

Я хочу преобразовать и обнаружить [[p=304_red]] в два совпадения в возврате. Я думал о str_replace, но я не могу сделать это дважды. Кроме того, str_replace будет ограничен одним, сотрудник может добавить его дважды. Кто-нибудь порекомендует лучшее решение (preg_replace кажется сложным и запутанным)

[[p=304_red]] 

Должен вернуться

<a href="http://site.com/jump?go=304_red">
<img src="http://cdn.com/304_red/large/1.jpg" />
</a>

Мой код возвращает только URL.

$question = $_GET['replyBoxField'];
$question = str_replace("[[p=", "<a href='http://site.com/jump?go='>", $question);
$question = str_replace("]]", "</a>", $question);

person TheBlackBenzKid    schedule 23.05.2012    source источник
comment
Вам нужно как-то создать цикл, который хранит все productId в строках, а затем вы можете повторно использовать столько раз, сколько хотите.   -  person AlphaApp    schedule 23.05.2012
comment
@AlphaApp Да, точно. Можете ли вы показать мне пример?   -  person TheBlackBenzKid    schedule 23.05.2012
comment
str_replace не ограничивается одним, и я явно имею в виду два возможных типа одного. Так в чем твой вопрос?   -  person hakre    schedule 23.05.2012
comment
Это не был дубликат, так почему отрицательный голос и закрытие. Вздутие живота.   -  person TheBlackBenzKid    schedule 25.05.2012


Ответы (3)


Простое регулярное выражение должно работать для вас здесь.

$question = preg_replace('@\[\[p=([^\]]+)\]\]@i', '<a href="http://site.com/jump?go=$1"><img src= "http://cdn.com/$1/large/1.jpg" ></a>', $question);

=)

person cstrat    schedule 23.05.2012
comment
Вы были быстрее меня, и я думаю, что ваше регулярное выражение работает лучше, чем мое. Пальцы вверх! - person nyson; 23.05.2012
comment
Спасибо, у вас было почти то же самое, только через 30 секунд =P - person cstrat; 23.05.2012

Разве регулярное выражение не лучший подход?

$filter = "/\[\[p=([^\]\s]+)\]\]/";
$transform = "<a href='http://site.com/jump?go=$1'><img src='http://cdn.com/$1/large/1.jpg' /></a>";

$string = preg_replace($filter, $transform, $string);
person nyson    schedule 23.05.2012

Все остальные ответы неверны, см. это:

Измените свой BBCode на этот [[p=304_sapphire]#[304_sapphire]]

$question = str_replace("[[p=", "<a href='http://domain.com/jump?go=", $question);
$question = str_replace("]#[", "'><img src='http://cdn.com/files/", $question);
$question = str_replace("]]", "/1/small.jpg'/></a>", $question);
person AlphaApp    schedule 23.05.2012
comment
Это избыточно. Пользователь не должен быть вынужден вводить одну и ту же информацию дважды. - person nyson; 23.05.2012
comment
Согласен, спасибо за старание, но -1 я хотел такой. - person TheBlackBenzKid; 23.05.2012