I’m trying to add a new bbcode to my phpfusion application. Im using with preg_replace. Here’s the code:
$text = preg_replace(
"#\[gameimg( float:(left|center|right))?\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/gameimg\]#sie",
"'<span style=\"display: block; max-width: 350px; margin: 0 0 5px 5px; $1\"><img src=\"'
. (strlen('$3') > 0 ? '$3' : BASEDIR.GAMESDIR)
. '$5$6\" alt=\"$5$6\" style=\"border:0px; max-width: 350px;\" /></span>'",
$text
);
If I supply an absolute url (for ex. [gameimg]http://localhost/dirname/file.jpg[/gameimg]) everything works fine, the picture shows up as expected. But if i omit the protokol and hostname using relative url ([gameimg]dirname/file.jpg[/gameimg]) i expect to append the basedir.gamedir constant to the given url but it doesn’t work at all, it prints out the original bbcode without any replacement, not the image. What am i doing wrong?
A couple things here:
preg_replacecall. Maybe you could break this problem into smaller parts so that it is easier to understand/maintain?i), yet you have things like(jpg|JPG). This is redundant.Your question asks why
[gameimg]tags withouthttp://..don’t get matched. Well this is because of the required((http|ftp|https|ftps)://)in your regex. You should make this section optional by adding a?, like this:((http|ftp|https|ftps)://)?