Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > регулярное вырожение ... [img][/img]=><img ...>


Автор: Ищущий! 22.7.2006, 20:02
Код

Нужно заменить [img]ссылка[/img] на <img src="ссылка">

написал код 

Код

    do{
        $s="((\[img])([[:alpha:]]{1,}://[^<>[:space:]]+[[:alnum:]/])(\[/img]))";
        $r="<img border=\"0\" src=\"\\3\">";
        $desc = ereg_replace($s,$r,$desc);
    }while(ereg($s,$desc));



и получается, так
если [img]ссылка[/img] то выдает <img src="ссылка"> - то есть все правильно,

но
если [img]ссылка[/img][img]ссылка[/img] то получатеся <img src="ссылка[/img][img]ссылка">

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

Автор: jzZ 22.7.2006, 21:20
Не могу удержаться и не спросить зачем это нужно, понятное дело для форума, но тогда бы я посоветовал, если форум самописный img вообще отключить, т.к. обязательно найдется энтузиаст к-рый раскопают в это уязвимость 

Автор: Shark 22.7.2006, 22:24
Ищущий!, а какая разница?????... 

Автор: smartov 22.7.2006, 22:45
Ищущий!, использовал ты бы лучше preg_replace.
Код

$string = '[img]http://www.myimage.ru/image123.jpg[/img]';
$string = preg_replace('/[img](^[)*[\/img]/U', '<img src="$1"></img>', $string);

p.s. может быть неверно. Писал не проверяя. 

Автор: Ищущий! 23.7.2006, 00:34
Код

    $s="/\[img](.{1,}?)\[\/img]/";
    $r="<img border=\"0\" src=\"\\1\">";
    $desc =preg_replace($s,$r,$desc);


я вот тут такое написал, работает... но ХЗ, что будет в "экстренных" ситуациях smile

Добавлено @ 00:36 
smartov, 


Цитата

Код

$string = '[img]http://www.myimage.ru/image123.jpg[/img]';
$string = preg_replace('/[img](^[)*[\/img]/U', '<img src="$1"></img>', $string);



Скажи, а что значит "U" ??? 

Автор: smartov 23.7.2006, 09:12
Цитата(Ищущий! @  22.7.2006,  23:34 Найти цитируемый пост)
Скажи, а что значит "U" ??? 

Млин, я то скажу, но по хорошему: http://ua2.php.net/manual/en/reference.pcre.pattern.modifiers.php Мануал зачем придумали?

U = UNGREEDY. Нежадный. Именно для того, чтобы похендлать твою ситуацию.
Жаднгый запрос будет брать максимально длинную строку.
Например по твоему регвыру строка
Код

[img]http://www.myimage.ru/image123.jpg[/img][img]http://www.myimage.ru/image456.jpg[/img]

Скушается вся. Короче опять глюки будут. А вот если ты напишешь
Код

$s="/\[img](.{1,}?)\[\/img]/U";

То тогда все будет ок - скушается первое вхождение (один img-/img) а потом второе третье ит.п.   

Автор: Ищущий! 23.7.2006, 18:59
smartov, 

да я знаю про жадность smile просто я её знаком "?" убиваю smile а тут буква... хе-хе.. вот и смутился мой наивный рассудок smile

Пасибо в любом случае!!! smile Ура всем!!! 

Автор: smartov 24.7.2006, 10:48
Ищущий!, 
Цитата(Ищущий! @  23.7.2006,  17:59 Найти цитируемый пост)
просто я её знаком "?" убиваю

А. Не заметил вопроса. Тогда все ок. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)