我正在尝试将新的bbcode添加到我的phpfusion应用程序中。我和preg_replace一起使用。这是代码:
$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
);
如果我提供绝对网址(例如[gameimg] http://localhost/dirname/file.jpg [/ gameimg]),一切正常,图片按预期显示。但是如果我使用相对url([gameimg] dirname / file.jpg [/ gameimg])省略protokol和hostname,我希望将basedir.gamedir常量附加到给定的url但它根本不起作用,它打印出来没有任何替换的原始bbcode,而不是图像。我做错了什么?
答案 0 :(得分:3)
这里有几件事:
preg_replace
电话。也许你可以将这个问题分解成更小的部分,以便更容易理解/维护?i
),但您有(jpg|JPG)
之类的内容。这是多余的。您的问题询问为什么没有[gameimg]
的{{1}}代码无法匹配。这是因为你的正则表达式中需要http://..
。您应该通过添加((http|ftp|https|ftps)://)
来使此部分成为可选项,如下所示:
?