Что не так с регуляркой?

Статус
В этой теме нельзя размещать новые ответы.

pozitiv

Постоялец
Регистрация
25 Ноя 2007
Сообщения
58
Реакции
5
Есть регулярное выражение, которое парсит ббкод [_img][_/img]
PHP:
$a = "#\[img\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]#sie";
$b = "'<a href=\'\\1'.str_replace(array('?','&','&','='),'','\\3').'\\4\' class=\'highslide\' onclick=\'return hs.expand(this)\' />
<img src=\'\\1'.str_replace(array('?','&','&','='),'','\\3').'\\4\' alt=\'\\3\\4\' style=\'border:0px\' class=\'forum-img\' />
</a>'";
$text = preg_replace($a,$b,$text);
На выходе я ожидаю получить <_a href=бла бла бла><_img src=бла бла бла><_/a>, но вместо этого ссылка съедается и я получаю только остатки ><_img src=бла бла бла><_/a> - как видите, нехватает начала тега. Это есл смотреть исходник страницы, на самой же странице отображается картинка с знаком > перед картинкой...
Путем не хитрых манипуляций я выяснил что проблема onclick=\'return hs.expand(this)\', если это действие убрать, то ссылка нормально отображается, но уже невыполняет нужных функций
В чем может быть проблема?
 
Может из-за того что Вы не экранировали точку? Попробуйте с onclick=\'return hs expand(this)\' - если заработает, то дело в этом.
 
Экранировал точку и скобки - все-равно неработает(
 
может так?

PHP:
$a = "/\[img\]([^\[]+)/i";
$b = "'<a href='\\1' class='highslide' onclick='return hs.expand(this)'/><img src='\\1' style='border:0px' class='forum-img' /></a>'"; 
$text = preg_replace($a,$b,$text);
 
Тоже нет, также обрезает ссылку, и более того добавляет [_/img] после картинки
 
Экранировал точку и скобки - все-равно неработает(
Неуверен, но попробуйте заэкранировать слэши

Добавлено через 2 минуты
А еще лучше приведите исходный код который парсите
 
Неуверен, но попробуйте заэкранировать слэши
Добавлено через 2 минуты
А еще лучше приведите исходный код который парсите

/ - этот слеш? непомогает((

Парсится обычный ббкод [img_]http://www.nulled.ws/nulled_v4/editor/insertimage.gif[/img_]
 
Может я чего недопонимаю, но почему бы не сделать так:
PHP:
<?php
$text ="[img]http://www.nulled.ws/nulled_v4/editor/insertimage.gif[/img]";
$text = str_replace("[img]", "", $text); 
$text = str_replace("[/img]", "", $text); 
echo "<a href='$text' class='highslide' onclick='return hs.expand(this)'/><img src='$text' style='border:0px' class='forum-img' /></a>";
?>
 
Так темболее неработает
 
Странно у меня с этим кодом все работает, возможно слова: "return" или "expand(this)" скрипт с чем-то путает или во всем виноват закрывающий слеш в открывающем теге "а": <a href....bla bla bla /> </a>
вобщем попробуй еще так:
PHP:
$a = "#\[img\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]#sie"; 
$zam = 'return hs.expand(this)';
$b = "'<a href=\'\\1'.str_replace(array('?','&','&','='),'','\\3').'\\4\' class=\'highslide\' onclick=\'$zam\' > 
<img src=\'\\1'.str_replace(array('?','&','&','='),'','\\3').'\\4\' alt=\'\\3\\4\' style=\'border:0px\' class=\'forum-img\' /> 
</a>'"; 
$text = preg_replace($a,$b,$text);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху