Question

I'm trying to make a bb tag that can set the image size and alignment. Like: [img=width:hight|alignment]image[/img]

I currently have this, but it only sees the \4 and ignores the rest.

$txt = preg_replace("#\[img=(.*?):(.*?)|(.*?)\](.+?)\[/img\]#is", "<a href=\"\\4\"><img src=\"\\4\" width=\"\\1 px\" height=\"\\2 px\" style=\"float: \\3 ; margin-right: 10px;\" /></a>", $txt);

It's above a lorem ipsum code:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pulvinar dapibus massa sed dapibus. Morbi cursus ipsum sit amet luctus facilisis. Donec sodales metus eu neque aliquam, aliquam eleifend felis hendrerit. Aliquam placerat, massa vel interdum ultrices, urna lectus posuere leo, in lacinia nibh felis venenatis neque. Vivamus vel volutpat sapien. Suspendisse potenti. Integer ac dapibus leo, at iaculis augue. Maecenas in orci consectetur arcu lacinia mattis nec et leo.
[img=100:200|left]images/galaxy.jpg[/img]
Donec ac tristique urna, eu tempus mauris. Sed id tellus varius, lobortis purus nec, volutpat massa. Ut venenatis sed nisi aliquet elementum. Donec rhoncus euismod erat sit amet vulputate. Suspendisse vitae orci sit amet orci pulvinar porttitor. Praesent viverra tortor id metus ornare, sit amet eleifend risus volutpat. Cras ac augue nec lorem pellentesque varius. Sed et nibh non justo hendrerit pretium. Aliquam egestas vitae arcu at ornare. Donec at fringilla leo. Nam condimentum lorem massa. Fusce non arcu pharetra, imperdiet justo at, molestie quam.

and this gives:

<a href="images/galaxy.jpg"><img src="images/galaxy.jpg" width=" px" height=" px" style="float: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pulvinar dapibus massa sed dapibus. Morbi cursus ipsum sit amet luctus facilisis. Donec sodales metus eu neque aliquam, aliquam eleifend felis hendrerit. Aliquam placerat, massa vel interdum ultrices, urna lectus posuere leo, in lacinia nibh felis venenatis neque. Vivamus vel volutpat sapien. Suspendisse potenti. Integer ac dapibus leo, at iaculis augue. Maecenas in orci consectetur arcu lacinia mattis nec et leo.<br />
[img=100:200|left ; margin-right: 10px;" /></a>
Donec ac tristique urna, eu tempus mauris. Sed id tellus varius, lobortis purus nec, volutpat massa. Ut venenatis sed nisi aliquet elementum. Donec rhoncus euismod erat sit amet vulputate. Suspendisse vitae orci sit amet orci pulvinar porttitor. Praesent viverra tortor id metus ornare, sit amet eleifend risus volutpat. Cras ac augue nec lorem pellentesque varius. Sed et nibh non justo hendrerit pretium. Aliquam egestas vitae arcu at ornare. Donec at fringilla leo. Nam condimentum lorem massa. Fusce non arcu pharetra, imperdiet justo at, molestie quam.

What am I doing wrong?

Was it helpful?

Solution

You have to escape the pipe character |:

$txt = preg_replace("#\[img=(.*?):(.*?)\|(.*?)\](.+?)\[/img\]#is", 
    '<a href="$4"><img src="$4" width="$1 px" height="$2 px" style="float:$3; margin-right: 10px;" /></a>', 
$txt);

And also use $n instead of \n the second is reserved for regex, the former for replacement.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top