我的共享服务器最近升级到php5.4,这打破了PEAR HTMLBBcode。如何用属性替换bbcode标记
我试着编写一个小函数来替换一些简单的bbcode的解析器,并在一些论坛上找到了一些代码。
我想解析BB代码的包括标签与属性的图像标签,如:
[img src="" h="" w="" alt=""]
[*] //for bulleted lists
由于我的正则表达式的知识是有限的,也许有人可以解释如何属性添加到img
行?我假设@
是为了抑制来自preg_replace()的错误?
你将如何处理这个标签[*]?
// original function
function bbCode($string) {
$search = array(
'@\[(?i)img\](.*?)\[/(?i)img\]@si',
'@\[url\s*=\s*(.*?)\s*\](.*?)\[\/url\]@si'
);
$replace = array(
'<img src="\\1">',
'<a href="\\1">\\2</a>'
);
return preg_replace($search , $replace, $string);
}
// test
function bbCode($string) {
$search = array(
'@\[img\s*=\s*(.*?)\s*\
\s*=[(0-9)+]
\s*=[(0-9)+]
\s*=\s*(.*?)\s*\]
(.*?)\[\/img\]@si',
'[*]'
);
$replace = array(
'<img src="\\1" height="\\2" width="\\3" alt="\\4">',
'<li></li>'
);
return preg_replace($search , $replace, $string);
}
简单地固定参考返回的错误'我的共享服务器最近升级到php5.2'你有哪个版本?我强烈建议你去寻找另一个主机(php 5.4+)。无论如何,'@'是正则表达式分隔符,您甚至可以使用'#'或'/'代替。我也对作者的创造力感到惊讶,在稍后设置的地方添加“(?i)”。 – HamZa
它实际上是5.4 – rrrfusco